TIL - 포인터 배열, 배열 포인터

손찬호·2024년 4월 30일
0

TIL

목록 보기
16/21

c언어를 공부하던 중 "포인터 배열"과 "배열 포인터"가 헷갈려서
이 참에 정리해보고자 한다.

포인터 배열

포인터를 저장하는 배열이다.
배열 안에 원소를 담는데 원소 타입이 포인터라고 보면 된다.

int *p[3] = NULL;

배열 포인터

배열을 가리키는 포인터이다.
포인터인데 배열을 가리키는 포인터를 말한다.

int (*p)[3] = NULL;

예시 코드 1

#include <stdio.h>

int main(){
    // 포인터 배열
    char *p[3] = {"Hello", "World", "!!!"};

    printf("*p: %s\n", *p);
    printf("p[0]: %s\n", p[0]);
    printf("p[1]: %s\n", p[1]);
    printf("*(p+1): %s\n", *(p+1));
    printf("p[2]: %s\n", p[2]);
    printf("*(p+2): %s\n", *(p+2));
    printf("\n");

    // 배열 포인터 
    char text[3] = {'H', 'W', '!'};
    char (*q)[3] = &text;

    printf("*(q[0]): %c\n", *(q[0]));
    printf("(*q)[0]: %c\n", (*q)[0]);
    printf("(*q)[1]: %c\n", (*q)[1]);
    printf("(*(q[0]+1)): %c\n", (*(q[0]+1)));
    printf("(*q)[2]: %c\n", (*q)[2]);
    printf("(*(q[0]+2)): %c\n", (*(q[0]+2)));
}

예제 코드 출력

*p: Hello
p[0]: Hello
p[1]: World
*(p+1): World
p[2]: !!!
*(p+2): !!!

*(q[0]): H
(*q)[0]: H
(*q)[1]: W
(*(q[0]+1)): W
(*q)[2]: !
(*(q[0]+2)): !

예제 코드 2

#include <stdio.h>
int main(int argc, char *argv[]) {
	int arr[2][3] = {1,2,3,4,5,6}; 
    int (*p)[3] = NULL;
	p = arr;
	printf("%d\n", *(p[0] + 1) + *(p[1] + 2)); 
    printf("%d\n", *(*(p + 1) + 0) + *(*(p + 1) + 1)); 
    return 0;
}

예제 코드 출력

8
9

결론

맨 뒤에 단어를 중심으로 생각하면 편하다.
포인터 배열 = 포인터를 저장하는 배열
배열 포인터 = 배열을 가리키는 포인터

profile
매일 1%씩 성장하려는 주니어 개발자입니다.

0개의 댓글

관련 채용 정보