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:43

C언어 포인터 배열

C언어에서 배열을 구성하는 배열 요소의 데이터 타입에 대한 제한은 없으며 배열도 배열 요소로 사용할수 있다.

'포인터 배열' 은 포인터가 배열 요소인 배열을 의미하며 포인터도 배열 요소로 처리할수 있다.

여러 개의 포인터로 구성된 포인터 배열은 서로 다른 길이의 문자열을 배열 형태로 처리하고자 할 때 주로 사용된다.

포인터 배열을 사용하는 형식은 다음과같다.

데이터 타입 * 배열이름[배열의크기]) char* str[2] {"hello","string"};

1
2
데이터 타입 * 배열이름[배열의크기]
예) char* str[2] {"hello","string"};
 

즉, 포인터 배열은 '다수의 주소를 저장하기 위한 공간' 이다. 여태까지는 *p = &a; 라고 했다면 하나의 주소를 저장한 셈인데

*p [3] = {&a,&b,&c}; 처럼 3가지 의 주소를 저장하려면 포인터 배열을 사용해야 한다.

포인터 배열 예제)

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
#include <stdio.h>
//포인터 배열 사용 예제 
int main()
{
    int a=1;
    int b=2;
    int c=3;
    //포인터 배열 '정수' 처리 
    int* arr[3]={&a,&b,&c}; // 정수형 포인터 배열 선언 후 각 a,b,c의 주소 저장 
    printf("%d\n",*arr[0]); // 역참조 연산자 사용 '주소가 가르키고 있는 값' 출력 
    printf("%d\n",*arr[1]);
    printf("%d\n",*arr[2]);
    
    char str1='a';   
    char str2='b';
    char str3='c';
    
    //포인터 배열 '문자' 처리
    char* arr2[3]={&str1,&str2,&str3}; //캐릭터형 포인터 배열 선언 후 각 str 변수 저장
    printf("%c\n",*arr2[0]); //역참조 연산자 사용 '주소가 가르키고 있는 값' 출력 
    printf("%c\n",*arr2[1]);
    printf("%c\n",*arr2[2]);
    
    //포인터 배열 '문자열' 처리
    char* arr3[3]={"hi","hello","bye"}; //캐릭터형 포인터 배열 선언 후 문자열 저장
    printf("%s\n",arr3[0]); //역참조 연산자 사용 '주소가 가르키고 있는 값' 출력
    printf("%s\n",arr3[1]);
    printf("%s\n",arr3[2]);
    
        
실행결과
1
2
3
a
b
c
hi
hello
bye
 
 

위의 코드와 주석 , 실행결과를 보면서 이해하면 쉽게 이해할수 있을것이다. 포인터 배열,배열 포인터 .. 말이 어렵지 포인터 개념만

확실하게 넘어가면 이것 또한 조금은 이해할수 있다.

포인터 배열이 주로 사용되는곳은 '서로 다른 길이의 문자열을 배열 형태로 처리할때' 사용된다.