'2010/05/25'에 해당되는 글 3건

  1. 2010.05.25 문자열 포인터
  2. 2010.05.25 2차원 포인터 배열
  3. 2010.05.25 배열포인터의 특징

char형 포인터를 선언하였다.
문자열에 대한 간단한 이해를 해보자.

char *temp_p;
char temp;

 temp_p =  'a'; //'a'는 문자로서 아스키코드로 숫자화되있다. 이것을 temp_p에 반환하는것은 말이안된다. temp_p는 주소만을 받는 포인터이다.
 temp_p = "a";

 temp = 'a';
 temp = "a"; //문자열을 반환하게되면 첫번째 문자열이 저장된 첫번째 위치의 주소값이 반환되는데 temp는 char형이기 때문에 값을 받을 수 없다.



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

2차원 포인터 배열  (0) 2010.05.25
배열포인터의 특징  (0) 2010.05.25
2차원 배열포인터와 대상체  (0) 2010.05.20
배열과 포인터  (0) 2010.05.19
포인터란?  (0) 2010.05.19
Posted by 아몰라


출처 - 다시 체계적으로 배우는 C언어 포인터

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

문자열 포인터  (0) 2010.05.25
배열포인터의 특징  (0) 2010.05.25
2차원 배열포인터와 대상체  (0) 2010.05.20
배열과 포인터  (0) 2010.05.19
포인터란?  (0) 2010.05.19
Posted by 아몰라
이런식으로 접근해서 2차원배열을 포인터를 이용해 사용할 수도 있다.

 int *temp;
 int temp_array[3][2] = {{0,1},{3,5},{7,9}};
 
temp = temp_array;      //temp는 4바이트 대상체를 가르킬수 있는 포인터 변수이다. temp_array는 배열명으로서 대상체의 크기가 24인 2차원배열이다. 오류난다.

 temp = &temp_array[0][0]; //&temp_array[0][0]는 2차원배열의 첫번째 주소를 가르키고 대상체가 4바이트이므로 성립한다. 성립한다.



다음은 연산과 연산 후 역참조 할 때의 차이점이다.
int (*temp)[2];
 int temp_array[3][2] = {{0,1},{3,5},{7,9}};
 
 temp = temp_array;
 
 cout<<temp+0<<endl;
 cout<<*(temp+0)<<endl;
 cout<<sizeof(temp+0)<<endl;
 cout<<sizeof(*(temp+0))<<endl;
 cout<<temp+1<<endl; 
 cout<<*(temp+1)<<endl;
 cout<<sizeof(temp+1)<<endl;
 cout<<sizeof(*(temp+1))<<endl;


포인터에서  +1 연산을 하였으므로 8크기만큼 이동한다. (2차원배열포인터이기때문에) 만약 그냥 1차원 포인터였다면 4만큼 이동하였을꺼다. 그리고 *연산을 하게되면 값을 취하게 됐을것이다.
하지만 여기선 *를 하게 됨으로 대상체가 행 전체로 바뀌게되면서 사이즈가 8로 바뀌는것을 볼 수 있다.
(temp+1)은 그냥 주소+정수 해서 연산을해서 주소위치만 바뀌었을뿐 이다. *(temp+1)을 함으로써 대상체가 바뀌게 된다. 즉, temp+1행을 가르키게 된다.
(가르키고 있는 주소는 보는바와 같이 같다. 단, 대상체가 다를뿐)



 포인터 접근순서
int (*temp)[2];
 int temp_array[3][2] = {{0,1},{3,5},{7,9}};
 
 temp = temp_array;
 
 cout<<*(*(temp+2)+1)<<endl;

+2를 함으로 3번째 행에 접근하였고 *연산을 하여서 해당 행을 가르키고있다. +1연산을 하여 해당 행에 2번째 열의 주소에 접근하였고 *연산을 하여 값에 접근하였다. 그래서 9가 출력된다.

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

문자열 포인터  (0) 2010.05.25
2차원 포인터 배열  (0) 2010.05.25
2차원 배열포인터와 대상체  (0) 2010.05.20
배열과 포인터  (0) 2010.05.19
포인터란?  (0) 2010.05.19
Posted by 아몰라
이전버튼 1 이전버튼