2012-01-27 1 views
5

다음 코드에서 결과 6, 8을 얻는 이유는 무엇입니까? 게시물을 검색했지만 내 질문과 정확히 일치하는 항목을 찾을 수 없습니다. 감사.sizeof 문자 배열

#include <stdio.h> 

void getSize(const char *str) 
{ 
     printf("%d\n", sizeof(str)/sizeof(char)); 
} 

int main() 
{ 
     char str[]="hello"; 
     printf("%d\n", sizeof(str)/sizeof(char)); 
     getSize(str); 
} 
+0

아마도이 사실을 알고있을 것입니다. 원하는 경우 문자열의 길이가 원하는 경우'strlen (str)'을 사용하십시오. – mark4o

+0

가능한 [sizeof (배열을 가리키는 포인터)를 찾는 방법] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeof-a-pointer-pointing-to- an-array) –

+0

@ mark4o 그래, 나는 그것을 알고 있지만 위의 그림을 원한다. –

답변

7

: 포인터 때문에 (sizeof(char) = 1 주어진) 8 바이트 (64 비트 플랫폼에서)입니다. 따라서 sizeof(str)은 포인터의 크기를 반환합니다. (이 경우 8 바이트)

main() 함수에서 str은 배열입니다. 따라서 sizeof(str) 배열의 크기를 반환합니다.

이것은 배열과 포인터 사이의 미묘한 차이 중 하나입니다.

+0

나는 그것을 미묘하게 부르지 않을 것이다 : * 다른 타입들에 대해서'sizeof'를 호출했을 때 나는 다른 결과를 얻는다.! * –

+0

@ todda.speot.is OP가'void getSize()를 쓰면 미묘했을 것이다. const char str [])'. –

+0

@Complicatedseebio 그게 배열/포인터 사이의 미묘한 차이에서 출발하고 배열/배열 사이의 미묘한 차이로 이동하기 시작했습니다 ... –

2

다른 유형, 크기.

main에서 strchar[6]입니다. getSizestrconst char *입니다. str 포인터입니다, 당신의 getSize() 기능에

6/1 = 6 
8/1 = 8 
+0

나는 본다. 배열에 함수를 전달할 때 배열이 첫 번째 요소를 가리키는 포인터로 변환된다는 것을 알고 있다고 생각합니다. 하지만 그 크기가 8 바이트 인 이유가 이상하다는 것을 알았습니다. 분명히 시스템이 64 비트 버전이라는 사실을 잊어 버렸습니다. –