'대상체'에 해당되는 글 1건

  1. 2010.05.20 2차원 배열포인터와 대상체

2차원 배열 포인터란 2차원 배열을 담는 포인터이다.

 int temp_array[3][2] = {{0,1},{3,5},{7,9}}; //2차원 배열
int (*temp)[2]; //2차원 배열포인터

temp = temp_array;

2차원 배열은 이렇게 2차원 배열포인터를 이용해서 가르킬수 있다.


아래서는 대상체에 대해서 개념을 이해해보자.
대상체란 말 그대로 가르키는 대상이 무엇이냐인데 아래를 보자.

int (*temp)[2];
 int temp_array[3][2] = {{0,1},{3,5},{7,9}};
 
1. temp = temp_array;
2. temp = temp_array[0];
3. temp = &temp_array[0][0];

위와 같이 실행하게되면 되야 된다고 생각할 수 있지만 1번만 성립된다.
왜냐하면...여기서 대상체에 대한 이해가 필요하다.
우선 1,2,3번은 주소값은 모두 같다.

1번은 temp는 2개의 대상체를 가진 값을 가르킬수 있는 포인터이고 temp_array는 2차원 배열의 배열명이기 때문에 당연히 성립한다.

문제는 2번과 3번인데

2번은 temp_array[0]같은 경우 행을 대표하는 것으로서 대상 체가 1번과 같이 배열 전체가 아니라 해당 행 전체인 것이다. 그러므로 temp가 가르킬 수 없는 것이다.

3번 같은 경우도 비슷하다. &temp_array[0][0]는  대상체가 temp_array[0][0]여서 불가능하다.




이번엔 더 분명하게 대상체에 대해서 sizeof를 통해서 알아보자.

int (*temp)[2]; //*temp는 2개의 대상체를 가지고있는 배열을 가르킨다 라고 생각하자.
 int temp_array[3][2] = {{0,1},{3,5},{7,9}};
 

 temp = temp_array;

 cout<<temp_array<<endl;
 cout<<temp_array[0]<<endl;
 cout<<&temp_array[0][0]<<endl;

 cout<<sizeof(temp_array)<<endl;
 cout<<sizeof(temp_array[0])<<endl; 
 cout<<sizeof(&temp_array[0][0])<<endl;

이렇게 모두 주소가 같지만 다른 메모리 크기가 나오는것을 확인할 수 있다.






 

'프로그래밍 기초 > C포인터' 카테고리의 다른 글

문자열 포인터  (0) 2010.05.25
2차원 포인터 배열  (0) 2010.05.25
배열포인터의 특징  (0) 2010.05.25
배열과 포인터  (0) 2010.05.19
포인터란?  (0) 2010.05.19
Posted by 아몰라
이전버튼 1 이전버튼