코드
#include <stdio.h>
int main(){
int i = 10;
int *p = NULL;
int check = 0;
p = &i;
printf("1. p = &i;\n");
printf(" 변수 i 주소 &i = %d i의 값 i = %d \n", &i, i);
printf("포인터 p의 값 p = %d 포인터 p가 가리키는 주소에 저장된 값 *p = %d \n", p, *p);
p++;
printf("2. p++; \n");
printf(" 변수 i 주소 &i = %d i의 값 i = %d \n", &i, i);
printf("포인터 p의 값 p = %d 포인터 p가 가리키는 주소에 저장된 값 *p = %d \n", p, *p);
p--;
printf("3. p--; \n");
printf(" 변수 i 주소 &i = %d i의 값 i = %d \n", &i, i);
printf("포인터 p의 값 p = %d 포인터 p가 가리키는 주소에 저장된 값 *p = %d \n\n", p, *p);
printf("--------------------------1--------------------------\n");
p = &i;
printf("초기화. p = &i; \n");
printf(" 변수 i 주소 &i = %d i의 값 i = %d \n", &i, i);
printf("포인터 p의 값 p = %d 포인터 p가 가리키는 주소에 저장된 값 *p = %d \n\n", p, *p);
check = 0;
//초기화.
check = *p++;
printf("1> check = *p++; \n");
printf(" 변수 i 주소 &i = %d i의 값 i = %d \n", &i, i);
printf("포인터 p의 값 p = %d 포인터 p가 가리키는 주소에 저장된 값 *p = %d \n", p, *p);
printf("변수 check = %d \n\n", check);
//*, =, ++의 실행 순서는...!
// * = ++ 이다. 1)p가 가리키는 변수의 값을 가져오고 2)check에 넣고 3)주소값(포인터변수) p를 ++한다.
//왜 *p를 ++하지 않지?? 왜 p에다가 ++되어지는 거지?
printf("---------------------------2-------------------------\n");
p = &i;
printf("초기화. p = &i; \n");
printf(" 변수 i 주소 &i = %d i의 값 i = %d \n", &i, i);
printf("포인터 p의 값 p = %d 포인터 p가 가리키는 주소에 저장된 값 *p = %d \n\n", p, *p);
check = 0;
//초기화.
check = (*p)++;
printf("2> check = (*p)++; \n");
printf(" 변수 i 주소 &i = %d i의 값 i = %d \n", &i, i);
printf("포인터 p의 값 p = %d 포인터 p가 가리키는 주소에 저장된 값 *p = %d \n", p, *p);
printf("변수 check = %d \n\n", check);
//* = ++
//1)p가 가리키는 변수 값을 가져오고 2)check에 넣고 3)p가 저장한 주소가 가리키는 값에 ++한다.
printf("---------------------------3-------------------------\n");
p = &i;
i = 0;
printf("초기화. p = &i; i=0; \n");
printf(" 변수 i 주소 &i = %d i의 값 i = %d \n", &i, i);
printf("포인터 p의 값 p = %d 포인터 p가 가리키는 주소에 저장된 값 *p = %d \n\n", p, *p);
check = 0;
//초기화.
check = *++p;
printf("3> check = *++p; \n");
printf(" 변수 i 주소 &i = %d i의 값 i = %d \n", &i, i);
printf("포인터 p의 값 p = %d 포인터 p가 가리키는 주소에 저장된 값 *p = %d \n", p, *p);
printf("변수 check = %d \n\n", check);
// ++ * =
//1)p가 가리키는 주소를 ++하고 2)p가 가리키는 주소에 저장된 값을 가져오고 3)p가 가리키는 주소에 저장된 값을 check에 저장한다.
printf("---------------------------4-------------------------\n");
p = &i;
i = 9;
printf("초기화. p = &i; i = 9; \n");
printf(" 변수 i 주소 &i = %d i의 값 i = %d \n", &i, i);
printf("포인터 p의 값 p = %d 포인터 p가 가리키는 주소에 저장된 값 *p = %d \n\n", p, *p);
check = 0;
//초기화.
check = ++*p;
printf("4> check = ++*p; \n");
printf(" 변수 i 주소 &i = %d i의 값 i = %d \n", &i, i);
printf("포인터 p의 값 p = %d 포인터 p가 가리키는 주소에 저장된 값 *p = %d \n", p, *p);
printf("변수 check = %d \n\n", check);
//* ++ =
//p가 가리키는 주소에 저장된 값을 가져오고 2)p가 가리키는 주소에 저장된 값에 ++하고 3)p가 가리키는 주소에 저장된 값을 ++한다.
return 0;
}
4>에서 ++가 전치수식이라고 항상 가장 먼저 처리되는건 아닌가요?
출력
1. p = &i;
변수 i 주소 &i = 14089596 i의 값 i = 10
포인터 p의 값 p = 14089596 포인터 p가 가리키는 주소에 저장된 값 *p = 10
2. p++;
변수 i 주소 &i = 14089596 i의 값 i = 10
포인터 p의 값 p = 14089600 포인터 p가 가리키는 주소에 저장된 값 *p = -858993460
3. p--;
변수 i 주소 &i = 14089596 i의 값 i = 10
포인터 p의 값 p = 14089596 포인터 p가 가리키는 주소에 저장된 값 *p = 10
--------------------------1--------------------------
초기화. p = &i;
변수 i 주소 &i = 14089596 i의 값 i = 10
포인터 p의 값 p = 14089596 포인터 p가 가리키는 주소에 저장된 값 *p = 10
1> check = *p++;
변수 i 주소 &i = 14089596 i의 값 i = 10
포인터 p의 값 p = 14089600 포인터 p가 가리키는 주소에 저장된 값 *p = -858993460
변수 check = 10
---------------------------2-------------------------
초기화. p = &i;
변수 i 주소 &i = 14089596 i의 값 i = 10
포인터 p의 값 p = 14089596 포인터 p가 가리키는 주소에 저장된 값 *p = 10
2> check = (*p)++;
변수 i 주소 &i = 14089596 i의 값 i = 11
포인터 p의 값 p = 14089596 포인터 p가 가리키는 주소에 저장된 값 *p = 11
변수 check = 10
---------------------------3-------------------------
초기화. p = &i; i=0;
변수 i 주소 &i = 14089596 i의 값 i = 0
포인터 p의 값 p = 14089596 포인터 p가 가리키는 주소에 저장된 값 *p = 0
3> check = *++p;
변수 i 주소 &i = 14089596 i의 값 i = 0
포인터 p의 값 p = 14089600 포인터 p가 가리키는 주소에 저장된 값 *p = -858993460
변수 check = -858993460
---------------------------4-------------------------
초기화. p = &i; i = 9;
변수 i 주소 &i = 14089596 i의 값 i = 9
포인터 p의 값 p = 14089596 포인터 p가 가리키는 주소에 저장된 값 *p = 9
4> check = ++*p;
변수 i 주소 &i = 14089596 i의 값 i = 10
포인터 p의 값 p = 14089596 포인터 p가 가리키는 주소에 저장된 값 *p = 10
변수 check = 10
1> check = *p++;
2> check = (*p)++;
1>은 포인터값을 증가시키고
2>는 포인터가 가리키는 변수의 값을 증가시키는데
*p를 하면 *p가 i로 대체된다고 볼 수 없는 건가요?(만일 대체해버린다고 하면 1>과 2>의 처리는 같아야 할텐데)
1> check = *p++;
2> check = (*p)++;
3> check = *++p;
4> check = ++*p;
이 4가지가 어떻게 실행되는지 헷갈리네요... 그리고 ++의 실행 순서가 이해가 안됩니다...
그냥 붙여 놓은 대로 실행되는거 같기도 하고... "++에 *p를 붙이느냐 p를 붙이느냐"가 차이점인듯도 하고...
우선 순위 및 식 평가 순서 라고 구글에 검색하면 MSDN 자료 나오니까 보세요.
스압 때문에 읽지는 않았습니다.
()는 가장 큰 연산자 우선순위를 가지며, pointer(*)와 증감++연산자는 서로 연산자 우선순위가 같습니다. 따라서 ++*p의 경우 *p에 ++연산을, *++p의 경우 ++p의 *연산을 하게됩니다. 또한 ++와 *는 왼쪽방향의 결합연산자 이므로 *ptr++의 경우 (*ptr)++와 같은 연산을 처리하게 됩니다.
전치수식인 3> 4>는 이해가 가는데 1> 2>는...
http://autogram.tk/이
중고차 어플리케이션 어떤가요?