본문 바로가기

c

다차원 배열과 포인터

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