본문 바로가기
공부,일/c언어

2중 포인터 & 포인터 값 대입

by fromnothing1 2022. 1. 28.

아래 코드는 visual studio의 cl 컴파일러를 사용한 결과이다.

 

 

포인터에 값을 넣는 방법은 &를 사용하는 방식과 *를 사용하는 방식2가지로 나뉜다.

 

2중포인터의 경우 &를 직접 이용하는 방식으로 포인터의 값을 넣게 되면  compiler에 따라서 인식하지 못할 수도 있기 때문에 2중포인터의 값을 넣을때는 * 사용을 권한다.

ex) *pp = p;

 

#include<stdio.h>

int main()
{
	// 이중 포인트 공부 
	int a = 10;
	int* p;
	int** pp;

	// & 이용한 포인터 값 설정

	p = &a;
	pp = &p;

	printf("using &====================\n");
	printf("*p  : %d\n", *p);
	printf("p   : %p\n", p);
	printf("&p  : %p\n", &p);
	printf("*pp : %p\n", *pp);
	printf("pp  : %p\n", pp);
	printf("&pp : %p\n", &pp);

	// * 이용
	
	int b = 10;

	*p = b; //이렇게 값을 입력해서 p에는 b의 주소가 들어간다.
	*pp = p;

	printf("using &====================\n");
	printf("*p  : %d\n", *p);
	printf("p   : %p\n", p);
	printf("&p  : %p\n", &p);
	printf("*pp : %p\n", *pp);
	printf("pp  : %p\n", pp);
	printf("&pp : %p\n", &pp);



}

 

이중 포인터의 활용

- 포인터를 매개변수로 사용할때 

 

변수의 경우 함수에서 변수의 값을 바꿀려면 포인터를 사용했다, 

마찬가지로 포인터의 값을 매개변수로 받아서 값을 바꾸기 위해서는 이중포인터를 사용하면된다.

 

ex)

#include<stdio.h>

void doubleP(char** pp)
{
	char* s = "abc";
	*pp = (char*)malloc(4);
	strcpy(*pp, s);
	return;
}


int main()
{
	char* p;

	doubleP(&p);
	printf("%s\n", p);
	free(p);
	return 0;	
}

 

 

 

 

 

 

 

 

'공부,일 > c언어' 카테고리의 다른 글

#pragma 사용법  (0) 2021.10.10
random stack address 옵션 끄기  (0) 2021.09.01
volatile  (0) 2021.07.16
저수준 파일 입출력  (0) 2021.06.29
우분투에서 c 언어 사용하기( gcc)  (0) 2021.06.28

댓글