[C언어] 8.배열
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바이트라도
int와float는 다르게 해석된다.
- 같은 4바이트라도
6. 메모리 관련 개념#
ASLR (Address Space Layout Randomization)
- 보안을 위해 실행 시점마다 메모리 주소를 무작위로 배치한다.
기준 주소와 상대 주소
- 기준 주소(base address)는 배열 시작 주소이다.
- 상대 주소(offset)는 인덱스를 기반으로 기준 주소에서 떨어진 거리이다.
- 실제 접근 주소 = 기준 주소 + 인덱스 × 자료형 크기.
학습 포인트 정리#
- 배열은 같은 자료형의 연속된 메모리 블록이다.
- 배열 이름은 첫 번째 원소 주소로 해석되지만,
&배열은 배열 전체 주소이므로 자료형이 다르다. - 2차원 배열은 논리적으로 행렬 구조지만 실제로는 1차원 선형 메모리이다.
- 문자열은
\0종료 규칙을 따르며, 길이를 동적으로 판단할 수 있다. - 변수 = 이름 + 주소 + 값, 자료형은 메모리 해석 방식이다.
- 메모리 접근은 기준 주소 + 상대 주소 개념으로 이해한다.