C언어 학습 노트 : 8. 배열#

1. 배열의 개념#

  • 배열은 같은 자료형의 원소들을 연속적으로 저장한 집합체이다.
  • 예: int a[5];int형 원소가 5개 저장된 고정 길이 배열.
  • 배열 이름은 일반적으로 배열의 첫 번째 원소 주소로 해석된다.
  • arr + 1은 다음 원소의 주소를 의미한다.
  • arr[i]*(arr + i)와 동일하다.

2. 배열 이름과 주소#

  • 배열 이름 자체는 상수 포인터처럼 취급된다.
  • arr → 배열의 첫 번째 원소 주소 (int*).
  • &arr → 배열 전체의 주소 (int (*)[n]).
  • 따라서 arr&arr는 같은 값을 가리키지만, 의미와 자료형이 다르다.

3. 2차원 배열#

  • 2차원 배열은 배열의 배열로, 행렬을 표현하는 데 사용된다.
  • 메모리 상에서는 1차원 선형 구조로 저장된다.
  • 예: int a[2][3]; → 실제 메모리 배치는 a[0][0], a[0][1], a[0][2], a[1][0], … 순서로 이어진다.
  • 인덱스 계산은 안쪽 인덱스(열)를 먼저 증가시키고, 그다음 바깥 인덱스(행)가 증가한다.

4. 문자열과 NULL 종료#

  • 문자열은 char 배열에 저장되며, 마지막에 NULL 문자('\0')로 종료를 표시한다.
  • \0은 문자열의 끝을 나타내어, 실제 길이를 가변적으로 판단할 수 있게 한다.
  • 예: "Hello" → 메모리에는 ['H','e','l','l','o','\0'] 로 저장된다.

5. 변수와 자료형#

  • 변수는 이름, 메모리 주소, 값의 세 요소로 구성된다.

  • 자료형은 저장된 메모리를 해석하는 방식이다.

    • 같은 4바이트라도 intfloat는 다르게 해석된다.

6. 메모리 관련 개념#

  • ASLR (Address Space Layout Randomization)

    • 보안을 위해 실행 시점마다 메모리 주소를 무작위로 배치한다.
  • 기준 주소와 상대 주소

    • 기준 주소(base address)는 배열 시작 주소이다.
    • 상대 주소(offset)는 인덱스를 기반으로 기준 주소에서 떨어진 거리이다.
    • 실제 접근 주소 = 기준 주소 + 인덱스 × 자료형 크기.

학습 포인트 정리#

  • 배열은 같은 자료형의 연속된 메모리 블록이다.
  • 배열 이름은 첫 번째 원소 주소로 해석되지만, &배열은 배열 전체 주소이므로 자료형이 다르다.
  • 2차원 배열은 논리적으로 행렬 구조지만 실제로는 1차원 선형 메모리이다.
  • 문자열은 \0 종료 규칙을 따르며, 길이를 동적으로 판단할 수 있다.
  • 변수 = 이름 + 주소 + 값, 자료형은 메모리 해석 방식이다.
  • 메모리 접근은 기준 주소 + 상대 주소 개념으로 이해한다.