2011-09-22 3 views
2

가능한 중복 : 다음 코드 감안할 때
Sizeof array passed as parameter이 두 가지 경우에 sizeof (배열)가 다른 이유는 무엇입니까?

, 인쇄 (포인터의 크기 주어진 64 비트 것 같다) I가 현재 해요 시스템 :

32 
4 

int의 크기는이 시스템에서 4 바이트 여야하므로 8 * 4 = 32가 적합합니다. 또한 포인터의 크기도 4 바이트가되어야한다는 것을 이해합니다. 이는 foo의 배열에서 발생하는 것입니다.

내 질문에 왜 sizeof (arr)는 main()에서 sizeof (arar)가 sizeof (myarray)와 다르게 처리되는 이유는 둘 다 특별히 int [8] 배열입니까? 나는 두 경우 모두에서 32를받을 것으로 예상 했었고 그것이 왜 다른 방법으로 끝날 지 혼란 스럽습니다.

#include <iostream> 

void foo(int arr[8]) 
{ 
    std::cerr << sizeof(arr) << std::endl; 
} 

int main() 
{ 
    int myarray[8]; 
    std::cerr << sizeof(myarray) << std::endl 
    foo(myarray); 
} 
+5

예 : http://stackoverflow.com/questions/1328223/sizeof-array-passed-as-parameter – Kusalananda

+3

배열이 함수 호출에서 작동하는 방식이 아닙니다 ... –

+0

+1, 좋은 호출입니다. 나는 보통 그 시간을 확인하지 않았다. –

답변

2

배열의 붕괴이다.

sizeof(myarray)은 배열의 크기 32 (num 요소 x 크기 int)를 인쇄합니다.

+0

배열의 크기는 32입니다. 요소의 수는 8입니다. –

0

왜냐하면 함수 인수 인 배열이 포인터로 변환되기 때문입니다. 기능이 foo() 4 바이트 INT의 sizeof 배열 포인터를 인쇄하고 있는지 등으로 통과 할 때 그렇게

void foo(int arr[8]) 

포인터에 실제로

void foo(int *arr) 
관련 문제