[C언어 자료구조] 헷갈리는 포인터연산
2019. 4. 14. 00:38ㆍ개인공부/C언어 자료구조
[*p++ : 포인터가 가리키는 값을 가져온 다음, 포인터를 한 칸 증가
*p-- : 포인터가 가리키는 값을 가져온 다음, 포인터를 한 칸 감소
(*p)++ : 포인터가 가리키는 값을 증가시킴
책에 이렇게 쓰여 있는데, 한국말인데 무슨 의미인지 캐치하기가 조금 힘들다.
int arr[3] = { 10,20,30 };
int* ptr = arr;
printf("%d\n", *ptr);
printf("%d\n", *ptr++);
printf("%d\n", *ptr);
해당 코드를 실행하면 10,10,20이 나온다 *ptr++의 의미는 *ptr을 쓰고 후에 ptr=ptr+1; 인 것을 줄여쓴 것이었다.
int arr[3] = { 10,20,30 };
int* ptr = arr+2;
printf("%d\n", *ptr);
printf("%d\n", *ptr--);
printf("%d\n", *ptr);
그럼 이건? 30, 30, 20이다. 슬슬 감이 온다.
(*ptr)++은 어떻게 될까
int arr[3] = { 10,20,30 };
int* ptr = arr;
printf("%d\n", *ptr);
printf("%d\n", (*ptr)++);
printf("%d\n", *ptr);
10, 10, 11이다. 알고보니 쉽다.
int arr[3] = { 10,20,30 };
int* ptr = arr;
printf("%d\n", *(ptr+1));
printf("%d\n", *(arr+1));
printf("%d\n", ptr[1]);
printf("%d\n", arr[1]);
20, 20, 20, 20이 나온다. 포인터의 연산은 일반적인 연산과 다르다.
그리고 배열의 이름은 포인터이기 때문에 배열의 이름을 연산해도 같은 값이 나온다.
그리고 포인터를 배열처럼 사용할 수도 있다.
그러나 배열의 이름은 포인터변수가 아닌 상수 포인터이므로 그 값을 바꿀 수없다.
int i = 10;
int arr[10];
arr = &i; //컴파일 에러
끗
'개인공부 > C언어 자료구조' 카테고리의 다른 글
연결리스트로 스택 구현 (2) | 2019.04.14 |
---|---|
C언어 연결 리스트 (0) | 2019.04.14 |
[C언어 자료구조]자체 참조 구조체 (0) | 2019.04.14 |
C언어 동적 메모리 할당[Dynamic memory allocation] (0) | 2019.04.11 |
이중포인터 설명 (0) | 2019.04.09 |