-
포인터 연산과 배열 표현(심화 연습편)C, C++ 2018. 12. 19. 16:14int ary[3] ={10,20,30};int* ptr[3]= {ary, ary+1, ary+2}; // 주소를 담고 있는 배열 (포인터배열)int **p[3]= {ptr, ptr+1, ptr+2}; // 포인터의 값을 담고 있는 배열printf("%d, %d, %d\n",*ptr[0],*ptr[1],*ptr[2]);printf("%d, %d, %d\n",***p,***(p+1),***(p+2));printf("%d, %d, %d\n",**p[0],**p[1],**p[2]);// 셋 다 동일한 결과값이 나옴
포인터연산과 배열
포인터연산에서의 +1은 대표값만큼 더해준다는 의미
배열명 +1 = 배열의 주소값이므로
(단순한 +1연산이 아니라 해당 주소값이 나타내는 덩어리 = 해당 배열의 하나의 요소만큼을 더해준다고 생각하자)
결과값int main(){int a[]= {0,1,2,3,4};int *p[]= {a,a+1,a+2,a+3,a+4};int **pp= p;// 단일변수, 배열이 아님pp++;printf("%u %u %u\n", pp-p, *pp-a,**pp);*pp++; // 연산자 우선순위는 ++, * 은 같은 단항연산자라서 앞에서 순차대로...인데 맨앞의 *은 의미가 없다.printf("%u %u %u\n", pp-p, *pp-a,**pp);*++pp;printf("%u %u %u\n", pp-p, *pp-a,**pp);pp=p; // 초기화시켜줌**pp++; // 순서대로 뒤에서 앞으로 연산하면 된다printf("%u %u %u %u\n", pp-p, *pp-a,**pp, pp);*++*pp;printf("%u %u %u %u\n", pp-p, *pp-a,**pp, pp);++**pp;printf("%u %u %u %u\n", pp-p, *pp-a,**pp, pp);1 1 1
2 2 2
3 3 3
------초기화
1 1 1
1 2 2
1 2 3
---------풀이-----------
첫번째 pp++;의 경우
pp=204 , pp값에+1 하면 204가 됨(포인터연산)
p=200, a=100 , *pp=104 **pp =1 이 되므로 결과값은 1,1,1 이 됨 같은 방식으로 아래도 풀이가능
PP
@200
P-주소
@200
@204
@208
@212
@216
값
@100
@104
@108
@112
@116
A-주소
@100
@104
@108
@112
@116
값(int)
0
1
2
3
4
'C, C++' 카테고리의 다른 글
void 포인터 (0) 2018.12.21 함수의 포인터 표현 + 포인터와 배열의 차이점 (0) 2018.12.20 String 함수의 사용, 선택정렬- 버블정렬 (0) 2018.12.18 2차원 배열 (0) 2018.12.14 포인터 얕은 복사 깊은 복사 (0) 2018.12.13