-
1. C 에서 실행. 실행/해석/이해 문제 없음.
#include <stdio.h> int main() { int a[3][3] = {{10,20,30},{40,50,60},{70,80,90}}; int *p[3] = {a+0, a+1, a+2}; printf("%d, %d, %d \n", *p[0], *p[1], *p[2]); printf("%d, %d", *(p[0]+1), *(p[2]+2)); return 0; } 아웃풋: 10, 40, 70 20, 90
2. C ++에서 실행. 실행/해석/이해 문제 많음. 해석하기 힘듦. 어레이 포인터도 아니고…이거 뭐지…
#include <iostream> int main(){ int a[3][3] = {{10,20,30},{40,50,60},{70,80,90}}; // int *p[3] = {a+0, a+1, a+2};// error: cannot convert ‘int (*)[3]’ to ‘int*’ in assignment //int (*p)[3][3] = {a+0, a+1, a+2};// error: scalar object ‘p’ requires one element in initializer int (*p[3])[3] = {a+0, a+1, a+2}; // ok. 그런데 이걸 어떻게 해석하지? std::cout << *p[0] <<" " << *p[1]<<" " << *p[2] <<'\n'; std::cout << p[0] <<" " << p[1]<<" " << p[2] <<'\n'; std::cout << **p[0] <<" " << **p[1]<<" " << **p[2] <<‘\n'; // 이걸 어떻게 해석하나 std::cout << (*p[0])[0] <<" " << (*p[1])[0]<<" " << (*p[2])[0] <<'\n'; // 위와 같은데 이걸 어떻게 해석하나 std::cout << (*p[0])[0] <<" " << (*p[0])[1]<<" " << (*p[0])[2] <<'\n'; return 0; } 아웃풋: 0x7ffe0de6a9a0 0x7ffe0de6a9ac 0x7ffe0de6a9b8 0x7ffe0de6a9a0 0x7ffe0de6a9ac 0x7ffe0de6a9b8 10 40 70 10 40 70 10 20 30