본문 바로가기

Today I Learned

23.01.20 - const와 포인터, 배열

읽기 전용 포인터 

const int* p - p가 가리키고 있는 공간의 값을 상수화한다.

*p로 읽는 것은 가능하지만 *p = 20처럼 쓰는 것은 불가능하다.

 

상수 포인터

int* const p - 하나의 주소만 참조 가능하다.

선언과 동시에 초기화해야 하며 그렇지 않으면 쓰레기 값으로 초기화 된 후 바꿀 수 없다.

 

읽기 전용 상수 포인터

const int* const p - 위 두가지 특성을 모두 갖고 있는 포인터이다.

 

 

 

배열은 블록 단위 데이터이다.

블록 단위 데이터는 메모리를 할당할 때 연속된 공간에 블록처럼 차곡차곡 할당하며 초기화 시 중괄호를 이용한다. 

 

배열 이름은 배열의 시작주소를 가리키는 상수 포인터이다.

iArray[N] = *(iArray+N) (O)

iArray++  (X)

배열이름은 우변값이기 때문에 ++같은 연산이 불가능

 

포인터 배열 - 포인터들을 담는 배열

int iA = 10,iB = 20,iC = 30;

int* pArray = {&iA, &iB, &iC};

 

배열 포인터 - 배열을 가리키는 포인터

char tmp1[3] = { 'b', 'l', 'o' };
char tmp2[3] = { 'c', 'k', '\0' }; 
char tmp3[5] = { 'd', 'm', 'a', 's', 'k'};

char (*arr)[3];

arr = &tmp1; //(o)
arr = &tmp2; //(o)
arr = &tmp3; //(x) 선언한 배열 포인터 크기와 맞지 않는다