목차
C언어 배열 vs 포인터
코드 예제
#include <stdio.h>
int arr[5] = {10,20,30,40,50};int *p = arr;
int main() { for (int i = 0; i < 5; i++) { printf("arr[%d] = %d\n", i, arr[i]); } printf("--------------------------\n"); for (int i = 0; i < 5; i++) { printf("포인터 p로 출력한 arr[%d] = %d\n", i, *(p+i)); }}설명
-
arr[i] 와 *(p+i) 는 완전히 동일하다.
-
배열 이름(arr)은 사실상 배열 첫 원소의 주소(&arr[0]) 를 의미한다.
-
따라서 int *p = arr; 로 선언하면 p는 배열의 첫 원소 주소를 가리키게 된다.
-
이후 *(p+i) 를 통해 arr[i] 와 같은 방식으로 값에 접근 가능하다.
실행 결과 예시
arr[0] = 10arr[1] = 20arr[2] = 30arr[3] = 40arr[4] = 50
---
포인터 p로 출력한 arr[0] = 10포인터 p로 출력한 arr[1] = 20포인터 p로 출력한 arr[2] = 30포인터 p로 출력한 arr[3] = 40포인터 p로 출력한 arr[4] = 50💡 핵심 포인트 배열 인덱스 arr[i] 는 사실 *(arr+i) 와 같은 의미다.
arr 는 배열의 시작 주소를 가리키는 포인터처럼 동작한다.
따라서 arr[i], _(arr+i), _(p+i) 는 모두 동일한 결과를 준다.