Small Grey Outline Pointer 포인터의 포인터/싱글포인터/더블포인터
본문 바로가기
Dev./C++

포인터의 포인터/싱글포인터/더블포인터

by sso. 2022. 4. 1.

 

 

 

포인터 변수에 대한 접근

#include <stdio.h>


void main() {

	int num = 3;
	int* ptr1 = &num; //num의 주소를 저장하는 포인터 변수 ptr1
	int** dptr = &ptr1; //포인터변수 ptr1의 주솟값을 저장하는 더블포인터
	int* ptr2;

	printf("%p %p\n", ptr1, dptr);
	printf("%d %d\n", num, **dptr);
	ptr2 = *dptr; //ptr1이 저장하고 있는 주소(*dptr)를 ptr2에 저장
	*ptr2 = 9;
	printf("%d %d\n", num, **dptr);

}

00000086EEAFF764 00000086EEAFF788
3 3
9 9

 

 

 


더블 포인터와 call by reference

#include <stdio.h>


void swapNumber(int** dptr1, int** dptr2) {
//더블 포인터 변수를 인자로 전달받는 함수

	//주솟값의 교환
	int* temp = *dptr1;
	*dptr1 = *dptr2;
	*dptr2 = temp;
}

int ex02() {

	int num1 = 66, num2 = 99;
	int* ptr1 = &num1;
	int* ptr2 = &num2;
	printf("*ptr1: %d *ptr2:%d\n", *ptr1, *ptr2);
	swapNumber(&ptr1, &ptr2); //값의 교환이 아닌, 주소값의 교환이 이루어짐
	printf("*ptr1: %d *ptr2: %d\n", *ptr1, *ptr2);

}



int main() {

	ex02();
}

 

*ptr1: 66 *ptr2:99
*ptr1: 99 *ptr2: 66

 

 


 

다중포인터

#include <stdio.h>

void ex03() {
	int num = 999;
	int* ptr = &num;
	int** dptr = &ptr;
	int*** tptr = &dptr;


	printf("%d %d %d %d", num, *ptr, **dptr, ***tptr);
}


int main() {

	ex03();
}

999 999 999 999

 

 

 

#include <stdio.h>


int myFunc(int num1, int num2) {
	printf("num1: %d num2: %d\n", num1, num2);
}
void ex04() {


	int (*fptr)(int, int);

	fptr = myFunc;//함수포인터 저장
	fptr(9, 6);

}


int main() {
	ex04();
}

num1: 9 num2: 6

 

함수도 메모리 공간에 저장되므로 주소 할당 됨

 

 

 

 

 

728x90

댓글