본문 바로가기
c언어

c언어 배열 포인터에 대하여 알아보기

by 개발자 L 2023. 2. 8.
반응형

c언어 배열 포인터에 대하여 알아보기

네 안녕하세요, 이번 포스팅에서는 배열 포인터에 대하여 알아보도록 하겠습니다.

배열 포인터도 포인터의 한 종류인데, 쓰는 방법 자체는 그렇게 어렵지 않습니다.

그럼 지금부터 시작하도록 하겠습니다.

 

1. 배열 포인터

배열 포인터는 말 그대로 배열을 가리키는 포인터입니다.

이전 포스팅에서는 포인터가 모여있는 배열인 포인터 배열에 대해서 말씀을 드렸었는데,

포인터의 기능은 단순히 포인터를 배열로 모아놓는 기능뿐만 아니라, 배열 자체를 포인터로 지정을 할 수 있습니다.

사용 방법은 아래와 같습니다.

int (*pa)[10];

이렇게 쓰면 배열 a를 가리키는 포인터 ap가 됩니다.

그럼 이걸 어떤 식으로 쓰는 지 한 번 보여드리도록 하겠습니다.

#include <stdio.h>

int main()
{
    int a[5] = {1, 2, 3, 4, 5};
    int (*pa)[5];

    pa = &a;

    for(int i = 0; i < 5; i++)
    {
        printf("%d \n", (*pa)[i]);
    }

    return 0;
}

배열 포인터를 이용해서 배열 안에 있는 원소를 출력하는 프로그램을 작성을 해봤습니다.

이제 어떻게 나오는 지 보여드리도록 하겠습니다.

1 
2 
3
4
5

이런 식으로 문제 없이 잘 나왔습니다.

반응형

 

2. 포인터 배열과 배열 포인터의 차이점과 실전 사용 여부

각각의 이름이 너무 비슷하고, 선언 방법도 비슷해서 조금 헷갈리실 수 있을 것 같아 이야기를 드리려 합니다.

이 둘의 차이를 이야기를 하자면 다음과 같습니다.

2 - 1. 연산자의 우선순위

이 둘은 일단 연산자의 우선순위에서 차이가 납니다.

포인터 배열은 이런 식으로 선언을 합니다.

int *ap[10];

여기서 보셔야 할 점은 배열을 나타내는 연산자인 '대괄호'가 포인터를 나타내는 연산자인 '에스터리스크' 보다

연산자 우선 순위가 높아서 변수 ap는 배열이 됩니다.

그래서 '포인터를 모아놓은 배열'이 되는 것입니다.

그리고 배열 포인터는 이런 식으로 선언을 합니다.

int (*pa)[10];

여기서도 잘 보셔야 할 건 연산자들의 우선순위입니다.

여기서 제일 우선순위가 높은 연산자는 '소괄호'입니다.

그래서 포인터 연산자인 '에스터리스크'를 '소괄호'로 묶었기 때문에 변수 'pa'는 포인터가 됩니다.

그래서 '배열을 가리키는 포인터'가 됩니다.

이 부분을 개발자들이 혼동하여 그냥 사용을 하는 경우가 있는데,

이 부분 때문에 오류를 범하는 일이 심심찮게 있으니,

항상 주의를 하시길 바랍니다.

그리고 연산자 우선순위와 결합 규칙에 대해서는 제가 여기에 따로 정리를 해뒀으니,

참고하시면 도움이 되실 겁니다.

2022.12.02 - [분류 전체보기] - c언어 연산자의 우선순위와 결합 규칙 알아보기

 

c언어 연산자의 우선순위와 결합 규칙 알아보기

c언어 연산자의 우선순위와 결합 규칙 알아보기 네 안녕하세요, 이번 포스팅에서는 c언어에서 쓰는 연산자의 우선순위와 결합 규칙에 대하여 알아보도록 하겠습니다. 우리가 수학 시간에 사칙

funnycoderl.tistory.com

 

2 - 2. 포인터 배열과 배열 포인터의 실전 사용 여부

이 둘 중에서 많이 사용이 되는 것은 포인터 배열입니다.

배열 포인터의 경우는 배열에 있는 원소 자체가 인덱스 넘버를 가지고 있어 주소의 기능을 하므로,

실전에서 쓰는 경우가 정말 적습니다.

다만, 포인터를 모아놓는 포인터 배열의 경우는 특히 문자열 배열의 선언 시

2차원 배열을 써서 낭비되는 메모리가 생기는 것을 방지하기 위해서 정말 많이 쓰기 때문에 알아두셔야 합니다.

 

여기까지 배열 포인터에 대하여 알아보았는데요,

다음 포스팅에서는 함수 포인터에 대하여 알아보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다~

반응형

댓글