본문 바로가기
공부/C, C++

[C] 배열

by 김샤랑 2022. 1. 1.

[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

왼쪽과 오른쪽은 똑같은 뜻이다.

 

우리가 배열을 인덱스로 접근하는 것 자체가 주소 접근이었다. 배열과 포인터는 같이 배워야 더 이해가 잘 되는 것 같다.

댓글