[C] 배열
배열의 특징
1. 배열은 메모리가 연속적인 구조이다.
2. 배열의 이름은 배열의 시작 주소이다.
특정 요소에 접근하고자 할 때 인덱스를 통해 접근한다.
int iArray [10] = { };
위 코드는 int 자료형 10묶음인 iArray를 0으로 초기화해서 만들겠다는 뜻이다.
빈 괄호 { }는 0 초기화를 뜻한다.
iArray가 이 배열의 시작 주소 값이다.
iArray [10]=10;
배열의 개념을 미리 아는 사람은 위 코드가 틀렸다는 것을 알 수 있다. 틀린 문장이다!
배열의 인덱스는 0부터 시작한다. 즉 iArray [10] 배열일 경우에는 iArray [9]까지만 값을 넣을 수 있는데 메모리를 초과해서 다른 곳에 넣었다. 다버그에도 잡히지 않는다면 다른 곳의 값이 틀릴 수 있다. 이런 경우의 오류에 주의하자.
- 포인터(Pointer)를 이용해서 두 번째 칸에 10을 넣고 싶다.
int iArr [10] = { }; // 다 0으로 초기화
// int 단위로 접근
*( iArr + 1) = 10 // iArr [1]에 값이 10 들어갔다.
iArr은 이 배열의 시작 주소 값이고 거기서 +1을 했다는 것은 한 단계 증가했다. 그곳을 가리키는 주소에 10 값을 넣었기 때문에 우리는 포인터를 이용하여 iArr 두 번째 칸에 10을 넣을 수 있었다.
이것을 간단히 알면 다시 우리가 잘 아는 배열로 돌아온다
*(iArr + 0) = 10 | iArr[0]=10 |
*(iArr + 1) = 10 | iArr[1]=10 |
왼쪽과 오른쪽은 똑같은 뜻이다.
우리가 배열을 인덱스로 접근하는 것 자체가 주소 접근이었다. 배열과 포인터는 같이 배워야 더 이해가 잘 되는 것 같다.
'공부 > C, C++' 카테고리의 다른 글
[C] 변수(지역 변수, 전역 변수, 정적 변수, 외부 변수) (0) | 2022.01.02 |
---|---|
[C] 분할 구현 (0) | 2022.01.02 |
[C] 재귀 함수(2), 피보나치 수열 (0) | 2022.01.01 |
[C] 비트 연산자 (<<, >>, &, |, xor, ~) (0) | 2022.01.01 |
[C] 재귀 함수(1) , Factorial 함수 (0) | 2021.12.30 |
댓글