int (*x)[10];
에서
int (*x)[10];
x
는 10
int
의 배열에 대한 포인터입니다.
그러면 왜이 코드가 컴파일되지 않습니다 :
int arr[3] ;
int (*p)[3] =arr;
하지만 작동합니다 :
int arr[3];
int (*p)[3] =&arr;
int (*x)[10];
에서
int (*x)[10];
x
는 10
int
의 배열에 대한 포인터입니다.
그러면 왜이 코드가 컴파일되지 않습니다 :
int arr[3] ;
int (*p)[3] =arr;
하지만 작동합니다 :
int arr[3];
int (*p)[3] =&arr;
arr
은 int*
으로 평가되는 표현식입니다 (이것은 유명한 '배열의 포인터 감소'묘기입니다. ure).
&arr
은 int (*)[3]
으로 평가되는 표현식입니다.
sizeof
또는 &
연산자에 대한 피연산자를 제외하고 모든 표현식에서 배열의 첫 번째 요소를 가리키는 'decay'배열 이름입니다. 이 두 가지 연산에서 배열 이름은 배열 형태를 유지합니다 (C99 6.3.2.1/3 "Lvalues, arrays 및 함수 지정자").
그것은 정확히 같은 이유로 작동하지 않습니다
int i;
int* pi = i; // error: no conversion from int to int*
+1 : 나는 또한 다른 유형의 있지만, 두 표현식이 동일한 포인터 주소를 반환 것을 지적한다. –