1. 일차원 배열
int hippo[4];
hippo == &hippo[0] // 1개의 int의 크기의 단위를 갖는 객체의 주소
양변에 참조연산자 *를 취하면
*hippo=hippo[0]
*(hippo+1)=hippo[1];
*(hippo+2)=hippo[2];
*(hippo+3)=hippo[3];
이 것을 일반화 하면
&hippo[N] == hippo+N
hippo[N] == *(hippo+N)
2. 이차원 배열(추가설명)
int zippo[4][2];
zippo // 2개의 int의 크기의 단위를 갖는 객체의 주소
==&zippo[0] == zippo[0] // 1개의 int의 크기의 단위를 갖는 객체의 주소
==&zippp[0][0]
zippo+1 != zippo[0]+1 // zippo는 2개의 int의 주소값 씩 증가 반면 zippo[0]는 1개의 int의 주소값 씩 증가
*zippo=zippo[0]==&zippo[0][0] //zippo는 배열의 zippo[0]의 주소, zippo[0]은 배열 zippo[0][0]의 주소
zippo[0]==&zippo[0][0]==*zippo
양변에 참조 연산자를 취하면
**zippo=zippo[0][0] //이중간접연산
zippo[1]==&zippo[1][0]==*(zippo+1)
zippo[2]==&zippo[2][0]==*(zippo+2)
zippo[3]==&zippo[3][0]==*(zippo+3)
&zippo[M][0]==*(zippo+M)
zippo[M][0]==**(zippo+M)
zippo[0][1]=*(*(zippo)+1)
zippo[0][2]=*(*(zippo)+2))
zippo[0][3]=*(*(zippo)+3))
zippo[0][N]=*(*(zippo)+N))
이걸 일반화 하면
zippo[M][N]==*(*(zippo+M)+N)
3. 이차원 배열 zippo와 호환되는 포인터
int * pax
pax는 1개의 int의 단위의 주소값의 포인터 이므로
zippo[0]과는 호환되지만, zippo와는 호환되지 않는다.
4. 우선순위
배열과 포인터의 우선순위는 배열이 더 높다.([]>*)
int(*pax)[2]
두개의 정수로 이루어진 배열을 가리키는 포인터
int * pax[2]
int를 가리키는 두개의 포인터 배열
'c' 카테고리의 다른 글
함수와 2차원 배열로의 전달인수 (1) | 2012.11.15 |
---|---|
n비트에서 -a의 2의 보수 계산 방법 (0) | 2012.11.15 |
const 와 포인터 (0) | 2012.11.13 |
함수의 전달인수 배열 (0) | 2012.11.12 |
초기화와 스토리지 클래스 (0) | 2012.11.10 |