코딩항해기

[C] 포인터와 배열 본문

C

[C] 포인터와 배열

miniBcake 2024. 10. 5. 14:13

 

포인터 상수

(배열의 주솟값)

배열 요소의 주솟값을 확인하면 첫 번째 요소부터 순서대로 나열되어있음을 확인할 수 있다. 그리고 배열의 주솟값은 배열 첫번째 요소의 주솟값과 동일한 것을 확인 할 수 있다. 즉, 배열 시작의 주솟값을 나타내는 포인터 변수이다. 그러나 배열의 이름은 다른 포인터 변수와 달리 값의 저장이 불가능한 상수형태의 포인터이다. 이를 포인터 상수라고도 한다.

 

배열의 포인터 연산

배열의 이름은 포인터이므로 배열의 이름을 피연산자로 해 *연산자를 사용할 수 있다. 배열의 이름은 첫 번째 요소(인덱스 0번)과 동일하므로 *연산자를 사용하게 되면 첫 번째 요소의 값이 반환된다.

 

위와 같은 방식으로 첫 번째 요소에는 접근할 수 있지만 배열의 다른 요소에 접근하려면 포인터 변수의 값을 증가시켜 포인터형의 크기만큼 주솟값을 증가시켜야 접근이 가능하다. 포인터 주소의 값은 자료형 타입에 따라 정해진 byte수 만큼 증가한다.

 

int num = 3;
int ptr = #
ptr++; //int 자료형을 가지고 있으므로 4byte만큼 주솟값 증가
ptr += 1; //int 자료형을 가지고 있으므로 4byte만큼 주솟값 증가

//자료형에 따라 증가되는 주솟값이 다르다. char는 1byte, short는 2byte 등

 

 

* 주의사항

배열의 할당 영역을 벗어나는 포인터 연산을 하게 될 경우, 주솟값도 하나의 값이기 때문에 에러를 유발하지는 않지만 할당되지 않은 메모리에 접근하게 되고 의미없는 값이 반환되어 프로그램에 악영향을 줄 수 있으니 지양하는 것이 좋다.

 

 

포인터 배열

포인터형을 사용해 배열을 선언하면 포인터를 저장할 수 있는 배열이 된다. 선언 및 초기화 방식은 일반 배열과 동일하다.

int * iparr[10]; //길이가 10인 int형 포인터 배열
double * dparr[20]; //길이가 20인 double형 포인터 배열