Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Hello Security World

C언어 [C언어 포인터의 포인터] 본문

프로그래밍/C

C언어 [C언어 포인터의 포인터]

프로앱등이 2020. 5. 3. 19:51

C언어 포인터의 포인터

포인터의 포인터는 포인터 변수를 처리하기 위한 용도로 사용되며, 포인터 배열 은 포인터가 배열 요소이기 때문에

이를 포인터 변수로 처리하기 위해 포인터의 포인터가 필요한 것이다.

보통 포인터의 포인터 까지만 사용하고 필요에 의해서 포인터의 포인터의 포인터를 사용할수 있다. 하지만 주소 참조를 3번이나

하게되면 로직이 복잡해지고 Reading이 어려워지기 때문에 잘 사용하지 않는다 따라서 포인터의 포인터만 이해하고 넘어가도

될것 같다.

포인터의 포인터를 사용하는 방법은 다음과 같다.

//데이터 타입 **포인터 변수; char ch='F'; //문자형 변수 char *pch; //문자형 포인터 변수 char **ppch; //문자형 포인터의 포인터 변수

1
2
3
4
//데이터 타입 **포인터 변수;
char ch='F'//문자형 변수
char *pch; //문자형 포인터 변수
char **ppch; //문자형 포인터의 포인터 변수
 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
//포인터의 포인터 
int main()
{
    char str='F';
    char* p = &str;
    char** pp = &p;
    
    printf("값 : %c\n",str); 
    printf("주소 : %x\n",&str); 
    
    printf("값 : %c\n",*p); 
    printf("주소 : %x\n",p);
     
    printf("값 : %c\n",**pp); 
    printf("주소 : %x\n",pp); 
    
}
실행결과
값 : F
주소 : 61feab
값 : F
주소 : 61feab
값 : F
주소 : 61fea4
 

포인터 배열의 문자열을 출력하는 프로그램

2중 포인터를 사용하는 예)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<stdio.h>
int point2(char **ptr);
int main()
{
    char* str[3={"hi","bye","ok"};
    
    printf("첫번째 문자열 뽑아: [ %s ]\n",str[0]); //index첫번째 문자열에 접근 0번째 방
    printf("두번째 문자열 뽑아: [ %s ]\n",str[1]); 
    printf("세번째 문자열 뽑아: [ %s ]\n",str[2]);
    point2(str); //2pointer
    
    return 0;
 
int point2(char **ptr)
{
    printf("\n");
    printf("첫번째 문자열 뽑아: [ %s ]\n",*(ptr+0)); //hi 출력 -> 포인터가 가지고 있는 주소로 접근 '포인터 표기법' 
    printf("두번째 문자열 뽑아: [ %s ]\n",*(ptr+1)); //bye 출력 
    printf("세번째 문자열 뽑아: [ %s ]\n",*(ptr+2)); //ok 출력 
    
    printf("\n");
    printf("첫번째 문자열 뽑아: [ %s ]\n",*ptr);   //hi 출력 -> 포인터가 가지고 있는 값으로 접근 '포인터 표기법' 
    printf("두번째 문자열 뽑아: [ %s ]\n",*ptr+3); //bye 출력
    printf("세번째 문자열 뽑아: [ %s ]\n",*ptr+7); //ok 출력
    
    printf("\n");
    printf("첫번째 문자열 뽑아: [ %s ]\n",ptr[0]);   //hi 출력 -> 배열 index 형식 접근 '배열 표기법' 
    printf("두번째 문자열 뽑아: [ %s ]\n",ptr[1]); //bye 출력
    printf("세번째 문자열 뽑아: [ %s ]\n",ptr[2]); //ok 출력
     
    return 0;
}
첫번째 문자열 뽑아: [ hi ]
두번째 문자열 뽑아: [ bye ]
세번째 문자열 뽑아: [ ok ]
첫번째 문자열 뽑아: [ hi ]
두번째 문자열 뽑아: [ bye ]
세번째 문자열 뽑아: [ ok ]
첫번째 문자열 뽑아: [ hi ]
두번째 문자열 뽑아: [ bye ]
세번째 문자열 뽑아: [ ok ]
첫번째 문자열 뽑아: [ hi ]
두번째 문자열 뽑아: [ bye ]
세번째 문자열 뽑아: [ ok ]