11. 배열과 포인터
배열 = 포인터?
배열과 포인터는 본질적으로 같습니다.
배열은 포인터로 표현할 수 있고, 포인터도 배열로 표현할 수 있는데 표기법의 차이가 있을 뿐입니다.
때문에 JAVA등의 언어에서는 포인터를 사용하지 않고 배열만을 사용하도록 합니다.
그러면 프로그래머가 불필요한 주소값을 건드리지 않을 수 있고 또 배열이 있는데 굳이 포인터를 사용할 필요가 없다는 것이겠지요.
하지만 위험하긴해도 포인터는 유용하게 쓰이는 경우가 많으므로 이를 위해 C언어를 선호하는 사람도 많습니다.
1) 배열
배열의 사용법
배열은 일반적인 변수와 비슷한 형태로 선언하고 사용하는데 대괄호[]를 사용하는 점이 다릅니다.
먼저 다음과 같이 배열을 선언합니다.
int num[4];
그러면
num[0], num[1], num[2], num[3]라는 4개의 num이 생성됩니다.
이때 1~4가 아니라 0~3으로 생성되는 이유는 C언어에서 자료형이 갖는 범위를 생각해보면 이해할 수 있습니다.
만큼의 크기를 갖는 자료형은 -128 ~ 127까지의 수를 표현하는데 이는 0을 표현하기 위해 양수 자리를 하나 사용하기 때문입니다.
그리고 배열에
num[0] = 3과 같이 일일이 값을 넣어도 되지만, 초기화 할 때 좀 더 편한 방법이 있습니다.int num[4] = {3, 1, 4, 5};
만약 모든 성분을 0으로 초기화 하고 싶다면 다음과 같은 생략 표현을 쓸 수 있습니다.
int num[4] = {0, };
배열을 선언하는 경우에 한해 다음과 같이 길이를 생략할 수 있습니다.
int num[] = {1, 2, 3, 4};
그러면 C언어가 알아서 num[4]라고 생각합니다.
배열을 사용하는 이유
그런데 어차피
num[2]와 같이 사용할 바에 그냥 num2로 선언하면 되는 것이 아닐까요?
물론 선언을 조금 더 짧게 할 수 있는 것도 장점이지만, 변수를 통해 접근할 수 있다는 장점이 있습니다.
예를 들어 배열에 저장된 값 중 양수의 개수를 세는 프로그램을 생각해봅시다.
int num[10] = {1, 3, 6, -3, 4, -1, 0, -5, -5, 7}
int i = 0, positive = 0;
for (i = 0; i < 10; i++)
{
if (num[i] > 0)
{
positive++;
}
}
printf("양수는 %d개입니다.\n", positive);
결과
양수는 5개입니다.
만약 이를 일일이 num1부터 num10까지 변수를 만들어 검사해야 한다면 소스코드를 읽을때도 복잡하고 수정하기도 까다롭습니다.
이렇듯 num[i]와 같은 접근에 배열이 유용하게 사용됩니다.
2) 포인터
주소연산자를 사용하는 방법으로 중급에서 진행.
댓글 없음:
댓글 쓰기