본문 바로가기

Language/C

포인터 기본 응용


함수는 필요에 따라 x포인터를 리턴한다.

ex)char *strcpy(char *des, char *src)

char string1[80]'

char string2[] = "Hanbit online";

char *sp;

sp = strcpy(string1, string2);

printf("%s\n",string1);

printf("%s\n",sp);

printf("%s\n",strcpy(string1, string2));//printf함수 내에서 바로 복사가 가능

 

●NULL포인터

NULL포인터는 0번지를 가리키는 것이 아니라 아무 것도 가리키지 않음을 의미한다.(실제 NULL의 숫자값은 0이다.)

NULL포인터 변수는 NULL로 초기화 하여 예상치 못한 프로그램의 오류를 방지한다.

 

●const 포인터 변수

const 포인터 변수는 포인터를 상수로 선언 하는 것을 뜻한다. 이는 좀 특의한 예의다.

포인터 변수가 가르키는 것을 포인터 변수를 통해서는 변경실킬수 없다. 무슨 말인고 하니

ex)int in=10;

const int *ip;

ip = ∈

printf("%d\n",*ip)//ip는 in을 가리킨다.

*ip = 20;//이 문법은 불가능하다. 단. in = 20; 으로는 값을 변경이 가능하다.

이는 포인터가 가르키는 공간 즉! ip가 가르키는 주소값을 상수화 시키는 것이다. 하지만 in변수를 통하여 값을 바꾸는 것은 무리가없다.

ex)int a = 10,b = 20;

int *const ip = &a;

*ip = 20;//a의 값을 참조하여 변경이 가능하다.

printf("%d\n",a");

ip = &b;//이문법은 불가능하다.

위 문법은 const를 *뒤에 놓은 것으로 즉 pointer변수 자체를 상수화 시킨 것이다. 포인터 변수는 a의 주소 말고는 다른 주소를 재 입력 하는게 불가능하다. 이는 주석의 말대로 역참조하여 수를 변경하고 참조하는 것은 무리가 없다. 하지만 한번 저장한 주소를 바꿀수 없는 일종의 해바라기 변수라고 볼 수 있다.

마지막으로 cinst를 양쪽에 모두 붙이면 포인터와 그 포인터가 가리키는 데이터 모두 바꿀수 없다.

 

ex)const char *const title_ptr = "Title";