** C에서
Jagathish
2023년10월12일
이 튜토리얼에서는 포인터에 대한 포인터(이중 포인터 또는 **
)를 사용하여 다른 포인터 변수의 주소를 저장하는 방법을 설명합니다.
C의 변수에 대한 메모리 할당
변수를 생성할 때 값을 저장하기 위해 해당 변수에 할당된 특정 메모리 블록이 있습니다. 예를 들어 char
변수 ch
와 값 a
를 만들었습니다. 내부적으로 1바이트의 메모리가 ch
변수에 할당됩니다.
C 포인터
C 프로그래밍에서 포인터는 다른 변수의 주소를 저장하는 변수입니다. 해당 주소에 있는 값에 액세스하려면 *
를 사용합니다.
#include <stdio.h>
int main() {
char ch = 'a'; // create a variable
char *ptr = &ch; // create a pointer to store the address of ch
printf("Address of ch: %p\n", &ch); // prints address
printf("Value of ch: %c\n", ch); // prints 'a'
printf("\nValue of ptr: %p\n", ptr); // prints the address of a
printf("*ptr(value of ch): %c\n",
*ptr); // Prints Content of the value of the ptr
}
출력:
Address of ch: 0x7ffc2aa264ef
Value of ch: a
Value of ptr: 0x7ffc2aa264ef
*ptr(value of ch): a
위의 코드에서,
char
변수ch
를 만들고 문자a
를 값으로 할당했습니다.char
포인터ptr
을 만들고 변수ch
의 주소를 저장했습니다.ch
의 주소와 값을 인쇄했습니다.ptr
의 값을 인쇄하면ptr
의 값은ch
의 주소가 됩니다.*ptr
을 사용하여ch
의 값을 출력합니다.ptr
의 값은 변수ch
의 주소이며 해당 주소에'a'
값이 있으므로 인쇄됩니다.
C에서 포인터에 대한 포인터(**
)
변수의 주소를 저장하기 위해 포인터를 사용합니다. 마찬가지로 포인터의 주소를 저장하려면 **
(포인터에 대한 포인터)를 사용해야 합니다. **
는 다른 포인터의 주소를 저장하는 포인터를 나타냅니다.
포인터 변수에 대한 포인터에 있는 값을 인쇄하려면 **
를 사용해야 합니다.
#include <stdio.h>
int main() {
char ch = 'a'; // create a variable
char *ptr = &ch; // create a pointer to store the address of ch
char **ptrToPtr = &ptr; // create a pointer to store the address of ch
printf("Address of ch: %p\n", &ch); // prints address of ch
printf("Value of ch: %c\n", ch); // prints 'a'
printf("\nValue of ptr: %p\n", ptr); // prints the address of ch
printf("Address of ptr: %p\n", &ptr); // prints address
printf("\nValue of ptrToPtr: %p\n", ptrToPtr); // prints the address of ptr
printf("*ptrToPtr(Address of ch): %p\n",
*ptrToPtr); // prints the address of ch
printf("**ptrToPtr(Value of ch): %c\n", **ptrToPtr); // prints ch
}
출력:
Address of ch: 0x7fffb48f95b7
Value of ch: a
Value of ptr: 0x7fffb48f95b7
Address of ptr: 0x7fffb48f95b8
Value of ptrToPtr: 0x7fffb48f95b8
*ptrToPtr(Address of ch): 0x7fffb48f95b7
**ptrToPtr(Value of ch): a
위의 코드에서,
char
변수ch
를 만들고 문자a
를 값으로 할당했습니다.char
포인터ptr
을 만들고 변수ch
의 주소를 저장했습니다.- 포인터
ptrToPtr
에 대한char
포인터를 만들고 변수ptr
의 주소를 저장했습니다. - ptr은 변수
ch
의 주소를 값으로 갖고ptrToPtr
은 포인터ptr
의 주소를 값으로 갖습니다. *ptrToPtr
과 같이ptrToPtr
을 역참조하면ch
변수의 주소를 얻습니다.**ptrToPtr
과 같이ptrToPtr
을 역참조하면ch
변수의 값을 얻습니다.
기억할 점
ptrToPtr
의 주소를 저장하려면 다음을 생성해야 합니다.
char ***ptrToPtrToPtr = &ptrToPtr;
printf("***ptrToPtrToPtr : %c\n", ***ptrToPtrToPtr); // 'a'