#include <stdio.h>
void main() {
int a = 10, b = 20, c = 30;
int *p = &a;
printf("a =%d, b=%d, c=%d\n", a, b, c);
printf("&a=%x,&b=%x,&c=%x\n",&a, &b, &c);
printf("p=%x\n", p);
printf("*(p+2)=%d\n", *(p + 2));
printf("*p+2=%d\n",*p+2);
}
학교에서 배운 것을 이해하여 설명해보면,
&a는 10이 들어간 상자 a의 주소값을,
int *p = &a 는 상자 a에 들어있는 값을 의미한다고 이해하였습니다.
그렇게 따지면, printf("p=%x\n", p); 이 부분에서 p를 출력을 하게되면, 10이 나와야 하는것 아닌가요??
---------
또, 포인터 연산자에서...
#include <stdio.h>
void main() {
int *ptr1, *ptr2;
int a = 100, b = 200;
ptr1 = &a;
ptr2 = &b;
*ptr1 = &b;
*ptr1++;
(*ptr2)++;
printf("ptr1 = %d, ptr2 = %d\n", *ptr1, *ptr2);
}
마지막 printf에서 *ptr1을 꺼낼때, 아래에 있는 증감연산이 되어 나오는건가요??
답은 ptr1 = 1245040, ptr2 = 201 이라고 나와있는데,
*ptr1, *ptr2는 int형이니 4Byte라서 증감연산이 되어서 1245040이 나온다고 배웠습니다.
만약에 증감연산이 되지 않고으면 100이 나오는건가요?
또한 *p1++과, *++p1의 차이점을 알려주시면 감사하겠습니다..