C 배열 크기에 대해 질문드려요
조회수 3661회
1 답변
-
미리 요약해서 말하면,
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);
댓글 입력