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


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

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


조회수 321


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);
  • 2016년 01월 29일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close