아래 코드는 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 |
댓글