C 배열 크기에 대해 질문드려요

조회수 3660회

C에서 배열에 원소가 총 몇 개 들어갈 수 있는지 알아내려면 어떻게 해야 되나요?

배열의 크기가 아니라, 최대 들어갈 수 있는 원소를 알고 싶어요

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    미리 요약해서 말하면, sizeof(배열 이름)/sizeof(배열의 원소) 으로 구할 수 있습니다.

    sizeof(배열 이름)은 배열의 전체 크기를 return합니다. 예를 들면

    int main() {
        /*원소의 개수가 10인 배열*/
        char charArr[10];
        int intArr[10];
        long longArr[10];
        double doubleArr[10];
    
        printf("sizeof(char)\t:%lu,\tsizeof(charArr):\t%lu\n", sizeof(char), sizeof(charArr));
        printf("sizeof(int)\t\t:%lu,\tsizeof(intArr):\t\t%lu\n", sizeof(int), sizeof(intArr));
        printf("sizeof(long)\t:%lu,\tsizeof(longArr):\t%lu\n", sizeof(long), sizeof(longArr));
        printf("sizeof(double)\t:%lu,\tsizeof(doubleArr):\t%lu\n", sizeof(double), sizeof(doubleArr));
    
    }
    

    출력 :

    sizeof(char)    :1, sizeof(charArr):    10
    sizeof(int)     :4, sizeof(intArr):     40
    sizeof(long)    :8, sizeof(longArr):    80
    sizeof(double)  :8, sizeof(doubleArr):  80
    

    여기서 sizeof(타입)sizeof(배열)의 관계가 보이시나요? 다들 원소가 10개인 배열을 선언했고, sizeof(배열)sizeof(타입)의 딱 10배입니다.

    따라서 배열의 원소 개수는 sizeof(배열이름)/sizeof(배열 원소의 타입)로 구할 수 있습니다.

    하지만 항상 sizeof(int)sizeof(long)처럼 배열의 원소가 어떤 타입인지 지정하는 건 귀찮은 일이고, 또 캐스팅이 변했을 때는 코드를 다 고쳐줘야 하므로 보통은 sizeof(charArr[0])처럼 쓰는 경우가 많습니다.

    예를 들면,

    int main() {
        int a[100]; //원소 개수 100개
        printf("sizeof(배열이름) : %lu\n", sizeof(a)); //400
        printf("sizeof(배열의 원소) : %lu\n", sizeof(a[0])); //4
        printf("원소의 개수 = sizeof(배열이름)/sizeof(배열의 원소) : %lu\n", sizeof(a)/sizeof(a[0])); //100
    }
    

    출력 :

    sizeof(배열이름) : 400
    sizeof(배열의 원소) : 4
    원소의 갯수 = sizeof(배열이름)/sizeof(배열의 원소) : 100
    

    배열 크기를 구할 때마다 나누는 게 귀찮다면 다음과 같이 매크로를 정의해서 쓰세요

    #define NELEMS(x)  (sizeof(x) / sizeof((x)[0]))
    
    int a[17];
    int n = NELEMS(a);
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)