주소는 정수처럼 보이지만 자료형에 대한 정보를 갖고 있는 특별한 값입니다. 따라서 연산을 자유롭개 할 수 없고 정해진 연산만 가능합니다. 정수 덧셈이 대표적인데, 다음과 같이 독특한 방식으로 수행합니다.
예를 들어 크기가 4바이트인 int형 변수 a의 주소 100번지에 1을 더한 결과는 101이 아닌 104가 됩니다. 물론 연산 결과 또한 주소가 됩니다.
이런 연산 규칙은 배열을 사용할 때 유용합니다. 배열명도 주소이므로 정수를 차례로 더하면 연속된 배열 요소의 주소를 구할 수 있고 여기에 간접 참조 연산을 수행하면 모든 배열 요소를 사용할 수 있습니다. 배열명을 주소로 활용하는 예를 살펴보겠습니다.
#include <stdio.h>
int main(void)
{
int ary[3];
int i;
*(ary + 0 ) = 10; // ary[0] = 10
*(ary + 1 ) = *(ary + 0) + 10; // ary[1] = ary[0] + 10
printf("세 번째 배열 요소에 키보드 입력 : ");
scanf("%d", ary + 2); // &ary[2]
for (i = 0; i < 3; i++) // 모든 배열 요소 출력
{
printf("%5d", *(ary + i)); // ary[i]
}
return 0;
}
배열 요소를 사용할 때는 상황에 따라 대괄호나 포인터 연산식 중 적당한 것을 골라 쓰면 됩니다. 특별한 경우가 아니라면 대괄호를 사용하는 것이 쉬우며, &ary[2]와 같은 경우는 ary + 2로 쓰면 연산 과정을 줄일 수 있습니다.
'프로그래밍언어 > C 언어' 카테고리의 다른 글
[C 언어] 배열명과 포인터의 차이 (0) | 2022.12.08 |
---|---|
[C 언어] 배열명 역할을 하는 포인터 (0) | 2022.12.08 |
[C 언어] 배열과 포인터의 관계 (0) | 2022.12.08 |
[C 언어] 포인터를 사용하는 이유 (0) | 2022.12.07 |
[C 언어] 포인터의 대입 규칙 (0) | 2022.12.07 |