본문 바로가기

공부/C언어

(C예제) 상수형태의 포인터

문자열은 문자배열이다.

 

문자열의 표현에는 두 가지 방법이 있다.

첫 번째는

char str1[ ] = 'My String';

으로 str1이라는 문자배열을 만들어서 

0번째에는 M, 1번째에는 y, 2번째에는 공백, 

9번째에는 g, 마지막으로 10번째에 널문자가 붙는 방식이다.

이 방법이 쉬워서 대부분 이렇게 쓴다. 90%정도

 

두 번째는

char * str2 = "Your String";

으로 Your String\0이라는 문자열을 같이 묶어서 자동으로 할당하고

이 주소를 포인터 변수 str2에 넣는다.

이 str2는 문자들이 있는 주소이므로 문자 포인터로 선언한다.

이 방법은 10%정도 쓴다. 가끔 쓴다는 뜻

위는 의미가 있는 문장이다.

str이 자동으로 할당된 문자열을 변경한다.

 

위는 의미가 없는 문장이다.

str이 문자열의 주소 값을 저장하기 때문에

여기에 다른 문자열을 넣어도 의미가 없다.


예제

str2 = "Our String"은 가리키는 대상을 변경된다.

 

str1[0]은 0번째에 있는 문자를 X로 변경이 가능하다.

 

str2[0]은 변경이 불가능하다.

str2에는 묶여 있는 문자열에 있기때문에 0번째 변경이 불가능하다.

 

정리하면 변수 성향의 str1에 저장된 문자열은 문자 한 개 변경이 가능하지만,

상수 성향의 str2에 저장된 문자열(묶여있는 포인터)은 문자 한 개씩 변경이 불가능하다.


포인터 배열

// 포인터 배열
int * arr1[20]; // 길이가 20인 int형 포인터 배열 arr1
double * arr2[30]; // 길이가 30인 double형 포인터 배열 arr2

arr의 배열에 숫자를 가리키는 포인터 주소가 있다.

&num이기 때문.

 

arr[0]은 num1의 주소가 있다.

*를 붙이면 num1의 주소에 있는 숫자를 들고온다.


strArr라는 배열에 Simple의 주소, String의 주소, Array의 주소가 있다.

Simple, String 등처럼 묶여있는게 포인터라고 하고,

그 주소들이 배열에 있으면 포인터 배열이라고 한다.

 

사용자가 입력한 문장을 컴파일러는 대략 이렇게 받아들인다.

주소 값은 임의로 정함.