-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpointer.c
160 lines (133 loc) · 4.5 KB
/
pointer.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <stdio.h>
void swap(int a, int b);
void swap_addr(int *a, int *b);
void changeArray(int* ptr);
int main_pointer(void)
{
//포인터
// [철수] : 101호 -> 메모리 공간의 주소
// [영희] : 201호
// [민수] : 301호
// 각 문 앞에 '암호' 가 걸려 있음
//int 철수 = 1; // 암호
//int 영희 = 2;
//int 민수 = 3;
//printf("철수네 주소: %d, 암호 : %d\n", &철수, 철수);
//printf("영희네 주소: %d, 암호 : %d\n", &영희, 영희);
//printf("민수네 주소: %d, 암호 : %d\n", &민수, 민수);
//// 미션맨!
//// 첫 번째 미션 : 아파트의 각 집에 방문하여 문에 적힌 암호 확인
//int* 미션맨; // 포인터 변수
//미션맨 = &철수;
//printf("미션맨이 방문하는 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
//미션맨 = &영희;
//printf("미션맨이 방문하는 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
//미션맨 = &민수;
//printf("미션맨이 방문하는 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
//// 두 번째 미션 : 각 암호에 3을 곱해라
//미션맨 = &철수;
//*미션맨 = *미션맨 * 3;
//printf("미션맨이 암호를 바꾼 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
//미션맨 = &영희;
//*미션맨 = *미션맨 * 3;
//printf("미션맨이 암호를 바꾼 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
//미션맨 = &민수;
//*미션맨 = *미션맨 * 3;
//printf("미션맨이 암호를 바꾼 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
//// 스파이
//// 미션맨이 바꾼 암호에서 2를 빼라!
//int * 스파이 = 미션맨;
//printf("\n ... 스파이가 미션 수행하는 중 ... \n\n");
//스파이 = &철수;
//*스파이 = *스파이 - 2; // 철수 = 철수 - 2;
//printf("스파이가 방문하는 곳 주소 : %d, 암호 : %d\n", 스파이, *스파이);
//스파이 = &영희;
//*스파이 = *스파이 - 2; // 철수 = 철수 - 2;
//printf("스파이가 방문하는 곳 주소 : %d, 암호 : %d\n", 스파이, *스파이);
//스파이 = &민수;
//*스파이 = *스파이 - 2; // 철수 = 철수 - 2;
//printf("스파이가 방문하는 곳 주소 : %d, 암호 : %d\n", 스파이, *스파이);
//printf("철수네 주소 : %d, 암호 : %d\n", &철수, 철수);
//printf("영희네 주소 : %d, 암호 : %d\n", &영희, 영희);
//printf("민수네 주소 : %d, 암호 : %d\n", &민수, 민수);
//// 참고로.. 미션맨이 사는 곳의 주소는 .. &미션맨으로 확인
//printf("미션맨의 주소 : %d\n", &미션맨);
//printf("스파이의 주소 : %d\n", &스파이);
// 배열 ?
//int arr[3] = { 5, 10, 15 };
//int* ptr = arr;
//for (int i = 0; i < 3; i++)
//{
// printf("배열 arr[%d] 의 값 : %d\n", i, arr[i]);
//}
//for (int i = 0; i < 3; i++)
//{
// printf("포인터 ptr[%d] 의 값: %d\n", i, ptr[i]);
//}
//ptr[0] = 100;
//ptr[1] = 200;
//ptr[2] = 300;
//for (int i = 0; i < 3; i++)
//{
// //printf("배열 arr[%d] 의 값 : %d\n", i, arr[i]);
// printf("배열 arr[%d] 의 값 : %d\n", i, *(arr + i));
//}
//for (int i = 0; i < 3; i++)
//{
// //printf("포인터 ptr[%d] 의 값: %d\n", i, ptr[i]);
// printf("포인터 ptr[%d] 의 값 : %d\n", i, *(ptr + i));
//}
//// *(arr + i) == arr[i] 똑같은 표현
//// arr == arr 배열의 첫번째 값의 주소와 동일 == &arr[0]
//printf("arr 자체의 값: %d\n", arr);
//printf("arr[0] 의 주소 : %d\n", &arr[0]);
//printf("arr 자체의 값이 가자는 주소의 실제 값 : %d\n", *arr); // *(arr + 0)
//printf("arr[0] 의 실제 값 : %d\n", *&arr[0]);
//// *& 는 아무것도 없는 것과 같다. & 는 주소이며, * 는 그 주소의 값이기 때문에,
//// *& 는 서로 상쇄된다.
//printf("arr[0] 의 실제 값 : %d\n", *&*&*&*&*&*&*&*&*&*&*&arr[0]);
//printf("arr[0] 의 실제 값 : %d\n", arr[0]);
// SWAP
//int a = 10;
//int b = 20;
//printf("a 의 주소 : %d\n", &a);
//printf("b 의 주소 : %d\n", &b);
//// a 와 b 의 값을 바꾼다.
//printf("Swap 함수 전 => a : %d, b : %d\n", a, b);
//swap(a, b);
//printf("Swap 함수 후 => a : %d, b : %d\n", a, b);
//// 값에 의한 복사 (Call by Value) -> 값만 복사한다는 의미
//// 주소값을 넘기면? 메모리 공간에 있는 주소값 자체를 넘기면... 철수네처럼
//printf("(주소값 전달)Swap 함수 전 => a : %d, b : %d\n", a, b);
//swap_addr(&a, &b);
//printf("(주소값 전달)Swap 함수 후 => a : %d, b : %d\n", a, b);
// 배열일 때, arr2 -> 주소
int arr2[3] = { 10, 20, 30 };
//changeArray(arr2);
changeArray(&arr2[0]);
for (int i = 0; i < 3; i++)
{
printf("%d\n", arr2[i]);
}
return 0;
}
void swap(int a, int b)
{
printf("(Swap 함수 내)a 의 주소 : %d\n", &a);
printf("(Swap 함수 내)b 의 주소 : %d\n", &b);
int temp = a;
a = b;
b = temp;
printf("Swap 함수 내 => a : %d, b : %d\n", a, b);
}
void swap_addr(int * a, int * b)
{
int temp = *a;
*a = *b;
*b = temp;
printf("(주소값 전달)Swap 함수 내 => a : %d, b : %d\n", *a, *b);
}
void changeArray(int* ptr)
{
ptr[2] = 50;
}