2013-04-25 2 views
0

다음 프로그램을 실행할 때 배열 크기가 달라집니다. 나는 여러 가지 방법으로 지쳤지 만 그 결과는 똑같습니다. 무엇이 잘못 될 수 있습니까?다른 배열 크기

#include<stdio.h> 

void array_size(char *a[]) 
{ 
    printf("Func Array Size: %d\n", sizeof(a)); 
} 

int main() 
{ 
    char *str_array[]={"one", "two", "three"}; 

    printf("Array Size: %d\n", (int)sizeof(str_array)); 

    array_size(str_array); 

    return 0; 
} 
+1

sizeof (a)는 포인터 크기입니다. 배열 크기가 아님 – BLUEPIXY

+1

C99에서'% zu "를 사용하여'size_t' 값을 정확하게 출력 할 수 있습니다. – effeffe

답변

-1

이것은 sizeof이 런타임 기능이 아닌 내장형 컴파일러이기 때문입니다. 바이너리로 하드 코드되어 있습니다.

`sizeof((char *)[]) = sizeof(a) = sizeof(void *)` 
`sizeof(str_array) = sizeof({"one", "two", "three"}) = 3 * sizeof(char *)` 
+1

그건 문제가되지 않습니다. 또한, sizeof (char **) =='sizeof (void *)'는 보장되지 않습니다. –

1

기능 메인에서 str_array은 3 개의 char *이있는 배열입니다.

함수 array_size의 매개 변수 a은 포인터 일뿐입니다. 컴파일러는 array_size를 호출 할 때 배열 길이 정보를 동적으로 전달하지 않습니다.

한 포인터의 크기가 세 포인터의 크기와 같지 않습니다. char * 포인터입니다.