포인터 기본 응용
함수는 필요에 따라 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";