전제 조건: C의 포인터
C에서 포인터에 대한 포인터는 다른 포인터의 주소를 저장하려고 할 때 사용됩니다. 첫 번째 포인터는 변수의 주소를 저장하는 데 사용됩니다. 그리고 두 번째 포인터는 첫 번째 포인터의 주소를 저장하는 데 사용됩니다. 그렇기 때문에 그들은 다음과 같이 알려져 있습니다. 이중 포인터 . 포인터에 대한 포인터를 사용하여 일반 포인터의 값을 변경하거나 가변 크기의 2차원 배열을 만들 수 있습니다. 이중 포인터는 일반 포인터와 메모리 스택에서 동일한 양의 공간을 차지합니다.
C에서 포인터에 대한 포인터 선언
포인터 대 포인터를 선언하는 것은 C에서 포인터를 선언하는 것과 유사합니다. 차이점은 포인터 이름 앞에 '*'를 추가로 배치해야 한다는 것입니다.
Java의 str.replace
data_type_of_pointer **name_of_variable = & normal_pointer_variable;>
int val = 5; int *ptr = &val; // storing address of val to pointer ptr. int **d_ptr = &ptr; // pointer to a pointer declared // which is pointing to an integer.>
위 다이어그램은 포인터에 대한 포인터의 메모리 표현을 보여줍니다. 첫 번째 포인터 ptr1은 변수의 주소를 저장하고 두 번째 포인터 ptr2는 첫 번째 포인터의 주소를 저장합니다.
C의 이중 포인터 예
씨
// C program to demonstrate pointer to pointer> #include> int> main()> {> >int> var = 789;> >// pointer for var> >int>* ptr2;> >// double pointer for ptr2> >int>** ptr1;> >// storing address of var in ptr2> >ptr2 = &var;> >// Storing address of ptr2 in ptr1> >ptr1 = &ptr2;> >// Displaying value of var using> >// both single and double pointers> >printf>(>'Value of var = %d
'>, var);> >printf>(>'Value of var using single pointer = %d
'>, *ptr2);> >printf>(>'Value of var using double pointer = %d
'>, **ptr1);> >return> 0;> }> |
>
>산출
Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789>
이중 포인터는 어떻게 작동하나요?
위 이미지를 사용하여 이중 포인터의 작동을 설명할 수 있습니다.
- 이중 포인터는 위에 표시된 구문을 사용하여 선언됩니다.
- 그 후, 우리는 이 새로운 이중 포인터의 값으로 다른 포인터의 주소를 저장합니다.
- 이제 해당 레벨을 조작하거나 역참조하려면 원하는 레벨 아래로 횟수만큼 별표( * ) 연산자를 사용해야 합니다.
C의 포인터 대 포인터 크기
C 프로그래밍 언어에서 이중 포인터는 C의 일반 포인터와 유사하게 동작합니다. 따라서 이중 포인터 변수의 크기는 항상 일반 포인터와 같습니다. 아래 C 프로그램을 사용하여 이를 확인할 수 있습니다.
예제 1: 포인터에 대한 포인터의 크기를 찾는 C 프로그램입니다.
씨
// C program to find the size of pointer to pointer> #include> int> main()> {> >// defining single and double pointers> >int> a = 5;> >int>* ptr = &a;> >int>** d_ptr = &ptr;> >// size of single pointer> >printf>(>' Size of normal Pointer: %d
'>,>sizeof>(ptr));> >// size of double pointer> >printf>(>' Size of Double Pointer: %d
'>,>sizeof>(d_ptr));> >return> 0;> }> |
SSH 전체 형식
>
>
SQL 연결산출
Size of normal Pointer: 8 Size of Double Pointer: 8>
메모: 위 코드의 출력은 사용되는 기계 유형에 따라 달라집니다. 포인터의 크기는 C 프로그래밍 언어에서 고정되어 있지 않으며 사용되는 CPU 아키텍처 및 OS와 같은 다른 요소에 따라 달라집니다. 일반적으로 64비트 운영 체제의 경우 크기는 8바이트이고 32비트 운영 체제의 경우 크기는 4바이트입니다.
C에서 이중 포인터 적용
다음은 C에서 포인터에 대한 포인터의 주요 용도입니다.
- 다차원 배열의 동적 메모리 할당에 사용됩니다.
- 텍스트 문서 단락, 문장 및 단어 의미와 같은 다단계 데이터를 저장하는 데 사용할 수 있습니다.
- 복사하지 않고 노드의 주소를 직접 조작하기 위해 데이터 구조에서 사용됩니다.
- 로컬 포인터에 저장된 주소를 조작하기 위해 함수 인수로 사용할 수 있습니다.
C의 다단계 포인터
이중 포인터는 C 언어에서 지원하는 유일한 다중 레벨 포인터가 아닙니다. 이중 포인터의 값을 변경하고 싶다면 어떻게 해야 할까요?
이 경우 포인터에 대한 포인터, 즉 int ***t_ptr이 되는 삼중 포인터를 사용할 수 있습니다.
트리플 포인터의 구문
pointer_type *** pointer_name;>
마찬가지로 삼중 포인터의 값을 변경하려면 포인터에 대한 포인터에 대한 포인터(4단계 포인터)를 사용할 수 있습니다. 즉, 레벨 – x 변수의 값을 변경하려면 레벨 – x+1 포인터를 사용할 수 있다고 말할 수 있습니다. 그리고 이 개념은 더욱 확장될 수 있습니다.
메모 : C에서는 모든 레벨 포인터를 사용할 수 있습니다. 이에 대한 제한은 없지만 프로그램을 매우 복잡하게 만들고 오류에 취약하게 만듭니다.
꼭 읽어야 할 내용 – C의 함수 포인터