int main(void) {
int num; //num변수를 선언한다.
int* numP = # //*numP의 주소값은 &num의 주소이다.
printf("숫자 입력 : ");
scanf("%d", &num);
printf(" num : %d\n", num); //scanf해서 받은 num의 값을 출력한다.
printf("*numP : %d\n\n", *numP); // num의 주소가 나온다.
printf(" &num : %d\n", &num); // num의 주소가 나온다.
printf(" numP : %d\n", numP); // numP의 주소가 나온다. 하지만 numP가 num의 주소가 같으므로 똑같은 값이 나온다.
return 0;
}
이것과
void result(int* x) {
*x = *x * *x;
}
int main(void) {
int num;
printf("숫자 입력 : ");
scanf("%d", &num);
result(&num);
printf("제곱 : %d\n", num);
return 0;
}
이것을 보면 공통점이 있다. 입력받은값은 주소로 하는것이고 출력값을 주소값으로 한다는 부분인데.
&를 넣으면 주소를 넣는것은 맞고 *는 &의 주소값을 구하는 것이다. 그러므로 값을 직접적으로 &을 넣는다고 해도 출력을 *을 하게된다면 &의 주소값이 출력이되는 것이다. 이부분은 꼭 기억하고 이해하자!
void array_copy(int* a, int* b, int size) { // 왜 배열인데 a[]형태가 아닌가??
int i;
printf("a배열의 값\n");
for (i = 0; i < size; i++) {
printf("%3d", a[i]);
}
printf("\nb배열의 값\n");
for (i = 0; i < size; i++) {
printf("%3d", a[i]);
}
}
int main(void) {
int a[N] = { 5,19,27,21,34 };
int b[N];
int j;
array_copy(&a, &b, N);
return 0;
}
또한 매개변수에 저렇게 배열의 형태를 넣지않아도 되는 것은 이미 포인터는 주소의값이 있기 때문이다. 그렇기때문에 저 배열의 값 모든 인스턴스를 가지고 있기때문에 따로 또다시 배열의 칸을 만들면 안되는 것이다.
'C > 포인터' 카테고리의 다른 글
포인터 사용시 주의해야할 점 (0) | 2019.12.05 |
---|---|
함수와 포인터 (0) | 2019.12.05 |
포인터를 더 활용해보기 (0) | 2019.08.12 |