일단 포인터를 배우면 가장 처음 배우는게


int *A;


같은 포인터변수의 선언을 배우잖아?


그러다가


int **A;


이중포인터의 선언도 배우고


int *A[4]


포인터배열의 선언,


int (*A)[4]


배열포인터까지.



저 일련의 선언규칙들을 단순히 외우기만 했었는데


어느날 생각해보니까 이런 생각이 들더라고



int *A 는 expression 에서의 *A 가 int 형이 되도록 A의 타입을 정함


int ** 는 expression 에서의 **A 가 int 형이 되도록 A의 타입을 정함


int *A[4] 는 expression 에서의 *A[4] 가 int 형이 되도록 A의 타입을 정함


int (*A)[4] 는 expression 에서의 (*A)[4] 가 int 형이 되도록 A의 타입을 정함

바로 위의 경우와 다른 점은 위에껀 *A[i] ≡ *(A[i]) 의 방식으로 연산하지만(operator precedence)

이 경우는 (*A)[i] 의 방식으로 연산하는 것이 정상적인 방식.



스펙문서는 안 읽어봤어. 이거 맞는 추론이야?