[C] 배열 인덱싱 연산자

2024. 7. 28. 18:56Memorizing/C

728x90

포인터는 아래와 같이 사용된다. 변수의 주소를 포인터 변수로 선언할 수 있고, 그 변수를 *를 이용해서 de-referencing하면 해당 변수의 메모리에 있는 값에 접근할 수 있다. 

#include <stdio.h>

int main()
{
    int a = 10
    int *pa = &a;
    printf("%d", *pa); // 10
    return 0;
}

배열은 동일한 타입의 데이터를 일렬로 저장하는 자료구조인데, 그렇기 때문에 특수하게 배열명의 이름은 배열의 첫 번째 주소의 원소를 가르키게 된다. 따라서 아래와 같이 작성하면 배열의 원소를 출력할 수 있다. 

#include <stdio.h>

int main()
{
    int ary[5] = {10, 20, 30, 40, 50};
    for(int i = 0; i < 5; i++){
        printf("%d\n", *(ary + i)); // 10, 20, 30, 40 50
    }
    return 0;
}

아래와 같이 작성해도 똑같은 결과를 얻을 수 있다. 

#include <stdio.h>

int main()
{
    int ary[5] = {10, 20, 30, 40, 50};
    for(int i = 0; i < 5; i++){
        printf("%d\n", ary[i]); // 10, 20, 30, 40, 50
    }
    return 0;
}

분명히 배열명은 배열의 첫 번째 원소의 주소를 가르킨다고했는데, ary[0]는 어떻게 해석해야할까 ? 배열의 첫 번째 원소의 주소의 첫 번째 값인가 ? 

답은 '아니다'이다. C에서 '[]'연산자는 배열 인덱싱 연산자로 따로 처리하게 된다. 그렇기 때문에 위와 같이 처리할 수 있다.

배열 인덱싱 연산자

배열 인덱싱 연산자는 아래와 같이 정의할 수 있다.

ary[i] == *(ary +i)

따라서 그냥 정의라고 생각하고 받아들여야하겠다.. 이런 일관성 없는 언어 같으니라고..