SW/C

8-1 배열

seungH 2025. 3. 30. 21:16
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