int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
printf("%lu\\n", sizeof(arr)); // 5 * sizeof(int) -> 20 (배열 전체 크기)
printf("%lu\\n", sizeof(p)); // 포인터 크기 -> 4(32비트) 또는 8(64비트)
배열의 이름은 자체로 배열의 첫번째 요소의 주소이다.
int arr[5] = {1, 2, 3, 4, 5};
printf("%p\\n", arr); // 첫 번째 요소의 주소 출력
printf("%p\\n", &arr[0]); // 위와 동일한 주소 출력
배열이름이 함수인자로 들어갈때!!
void func(int arr[]) { // int arr[]는 int *arr와 동일하게 해석됨
printf("%lu\\n", sizeof(arr)); // 포인터 크기 출력 (4 또는 8)
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(arr); // 배열을 전달하면 주소가 전달됨
}
위 코드는 arr의 시작주소만 알려줄뿐, 마지막 주소는 어딘지 알 수 없다. 따라서 마지막에 널값을 집어넣거나 인자로 줄때 크기도 건네줘야한다.
#include <stdio.h>
void func(int arr[], int size) { // 배열 크기를 같이 전달
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\\n");
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5); // 배열과 크기를 함께 전달
}
또는
#include <stdio.h>
void func(int arr[]) {
int i = 0;
while (arr[i] != -1) { // -1이 나오면 종료
printf("%d ", arr[i]);
i++;
}
printf("\\n");
}
int main() {
int arr[] = {1, 2, 3, 4, 5, -1}; // -1을 종료 신호로 사용
func(arr);
}
'SW > C' 카테고리의 다른 글
| 11-2 버퍼를 사용하는 입력함수 (0) | 2025.03.30 |
|---|---|
| 10-1 배열과 포인터 (0) | 2025.03.30 |
| 9-2 포인터 완전정복 (0) | 2025.03.30 |
| 9-1 포인터 (0) | 2025.03.30 |
| 8-2 문자 저장하기 (0) | 2025.03.30 |