[C] 배열 인덱싱 연산자
2024. 7. 28. 18:56ㆍMemorizing/C
포인터는 아래와 같이 사용된다. 변수의 주소를 포인터 변수로 선언할 수 있고, 그 변수를 *를 이용해서 de-referencing하면 해당 변수의 메모리에 있는 값에 접근할 수 있다.
#include <stdio.h>
int main()
{
int a = 10
int *pa = &a;
printf("%d", *pa); // 10
return 0;
}
배열은 동일한 타입의 데이터를 일렬로 저장하는 자료구조인데, 그렇기 때문에 특수하게 배열명의 이름은 배열의 첫 번째 주소의 원소를 가르키게 된다. 따라서 아래와 같이 작성하면 배열의 원소를 출력할 수 있다.
#include <stdio.h>
int main()
{
int ary[5] = {10, 20, 30, 40, 50};
for(int i = 0; i < 5; i++){
printf("%d\n", *(ary + i)); // 10, 20, 30, 40 50
}
return 0;
}
아래와 같이 작성해도 똑같은 결과를 얻을 수 있다.
#include <stdio.h>
int main()
{
int ary[5] = {10, 20, 30, 40, 50};
for(int i = 0; i < 5; i++){
printf("%d\n", ary[i]); // 10, 20, 30, 40, 50
}
return 0;
}
분명히 배열명은 배열의 첫 번째 원소의 주소를 가르킨다고했는데, ary[0]는 어떻게 해석해야할까 ? 배열의 첫 번째 원소의 주소의 첫 번째 값인가 ?
답은 '아니다'이다. C에서 '[]'연산자는 배열 인덱싱 연산자로 따로 처리하게 된다. 그렇기 때문에 위와 같이 처리할 수 있다.
배열 인덱싱 연산자
배열 인덱싱 연산자는 아래와 같이 정의할 수 있다.
ary[i] == *(ary +i)
따라서 그냥 정의라고 생각하고 받아들여야하겠다.. 이런 일관성 없는 언어 같으니라고..
'Memorizing > C' 카테고리의 다른 글
[C] 문자열과 배열 (0) | 2024.07.28 |
---|---|
[C] 포인터 변수를 사용하는 swap 함수의 이해 (0) | 2024.07.28 |
[C] 왜 scanf에서는 주소값을 인자로 받는가 ? (0) | 2024.07.27 |
[C] int 그리고 음수의 표현에 대한 이해 (0) | 2024.07.27 |