반응형
포인터 변수는 해당 변수의 주소를 가리킨다고 배웠다.
말 그대로이다.
이를 간단히 정리하면 아래와 같다.
int num = 3;
int *ptr = #
printf("num: %d", ptr); // num변수가 저장된 주소를 가리킨다.
printf("arr: %d", *ptr); // num에 저장된 값인 3을 반환한다.
printf("arr: %d", &ptr); // ptr변수의 주소를 반환한다.
그럼 포인터변수 ptr에 다른 변수의 주소값을 지정하려면 어떻게 해야할까?
아래 코드를 살펴보자.
int num1 = 3;
int num2 = 6;
int* ptr = &num1;
printf("ptr: %d\n", ptr); // num1의 주소값을 반환한다.
printf("*ptr: %d\n", *ptr); // num1의 변수 값을 반환한다.
printf("&ptr: %d\n\n", &ptr); // ptr변수의 주소값을 반환한다.
ptr = &num2;
printf("ptr: %d\n", ptr); // num2의 주소값을 반환한다.
printf("*ptr: %d\n", *ptr); // num2의 변수 값을 반환한다.
printf("&ptr: %d\n", &ptr); // ptr변수의 주소값을 반환하며 이는 위와 같다.
변수의 주소가 저장되는 포인터변수 p에 다른 변수의 주소를 할당해줌으로서 위와 같은 결과를
확인할 수 있다.
그럼 const char *p = "Hellow" 로 지정되는 문자열 상수는 어떻게 이해할 수 있을까?
위와 같이 포인터변수 p에는 문자열 "Hellow"를 담고있는 주소값이 저장된다.
그럼 포인터변수 p가 다른 문자열을 가리키게 하려면 어떻게 해야할까?
이럴 경우 다른 문자열의 값을 p에 할당해주면 된다.
const char *p = "Hello";
printf("string1: %s\n", p);
p = "Good Bye";
printf("string2: %s\n", p);
위의 코드에서 p = "Good Bye" 로 지정해주는 과정을 통해
p변수에는 "Good Bye"라는 문자열의 시작 주소가 담기게 된다.
int형의 경우 &변수 를 통해 포인터변수에 주소값을 지정해주어야 했지만
문자열의 경우 단순히 문자열을 지정해주면 해당 문자열의 주소값이 대입되는 것으로 보인다.
반응형