C언어 배열과 포인터 차이

배열 이름은 배열의 시작 주소를 가리키지만, 포인터와는 엄연히 다른 존재다.

배열은 고정된 메모리 공간을 나타내고, 포인터는 주소를 담는 변수다.

배열과 포인터 비교 예시

#include <stdio.h>

int main() {
    int arr[3] = {1, 2, 3};
    int *p = arr;

    // 1. 크기 차이
    printf("sizeof(arr): %zu\n", sizeof(arr)); // 배열 전체 크기 (12 bytes)
    printf("sizeof(p): %zu\n", sizeof(p));     // 포인터 변수 크기 (8 bytes)

    // 2. 주소값 변경 가능 여부
    p++; // 가능
    // arr++; // 컴파일 에러! 배열 이름은 상수 형태의 주소

    // 3. 인덱스 접근의 동일성
    printf("arr[1]: %d, p[1]: %d\n", arr[1], p[1]);
    printf("*(arr+1): %d, *(p+1): %d\n", *(arr+1), *(p+1));

    return 0;
}

코드 설명:
sizeof 연산 시 배열은 배열 전체의 크기를, 포인터는 주소값을 저장하는 변수 자체의 크기를 반환한다.
– 배열 이름은 배열의 시작 주소를 나타내는 상수이므로 값을 변경할 수 없지만, 포인터는 변수이므로 다른 주소를 가리키도록 변경할 수 “있다.

오늘 공부 기록의 중심은 C언어 배열과 포인터 차이였다.

주소값 출력을 직접 찍어 보니 처음 가정을 의심해 보니 정의는 외웠는데 조건이 바뀌는 순간 판단이 흔들렸다.

배열과 부분은 따로 떼서 다시 읽었다.

이론 문장보다 내 코드에서 어떤 순간에 실패하는지가 훨씬 오래 남았다.

디버거를 켜고 한 단계씩 내려가니 추상적으로 보이던 흐름이 숫자로 보였다.

오늘 정리는 길지 않았지만 밀도는 높았다.

C언어 배열과 포인터 차이은 내일 한 번 더 확인해 볼 생각인 것 같다.

Author avatar

웨이호프

WordPress creator and blogger.

View all posts