2014-09-26 1 views
0

저는 C에서 아주 새로운데, int/long/short가 얼마나 많은 바이트를 가지고 있는지를 말하려고합니다. 변수를 가지고 있어야 sizeof (int)를 말할 수 없다는 것을 명심하십시오. 어떤 도움을 주셔서 감사합니다!sizeof가 다른 변수에 대해 동일한 크기 (8 바이트)를보고하는 이유는 무엇입니까?

#include <stdio.h> 

int main() 
{ 
short* A; 
int* B; 
long* C; 

printf("Size of integer variable = %d bytes\n", sizeof(A)); 
printf("Size of integer variable = %d bytes\n", sizeof(B)); 
printf("Size of integer variable = %d bytes\n", sizeof(C)); 
return 0; 
} 
+2

'int * '는'int '와 다릅니다. – jwodder

+1

아 오른쪽 * 포인터가 맞습니까? – Skeeter

+2

[sizeof (일부 포인터)는 항상 4와 동일합니까?] (http://stackoverflow.com/questions/399003/is-the-sizeofsome-pointer-always-equal-to-four) –

답변

5

당신이 sizeof를 호출하는 변수의 각 실제로 변수에 포인터입니다. 이러한 포인터는 64 비트 응용 프로그램에서 포인터가 가리키는 변수 유형에 관계없이 항상 8 바이트 (8 바이트 x 8 비트 = 64 비트)입니다. 32 비트 응용 프로그램에서는 4 바이트 (바이트 당 4 바이트 x 8 비트 = 32 비트)를 반환합니다. 이는 포인터가 메모리 위치에 대한 주소이기 때문에이 주소의 크기는 포인터가 가리키는 변수의 크기에 의존하지 않기 때문입니다.

사용자가 포인터 비 참조 으로 가리키고있는 변수의 크기를 계산할 수 sizeof 함수 포인터 :

printf("Size of short variable = %d bytes\n", sizeof(*A)); 
printf("Size of integer variable = %d bytes\n", sizeof(*B)); 
printf("Size of long variable = %d bytes\n", sizeof(*C)); 

제 (컴파일러에 의존 할 수있다) 다음이 출력 할 것이다 :

Size of short variable = 2 bytes 
Size of integer variable = 4 bytes 
Size of long variable = 4 bytes 
0

short int 포인터, int 포인터 및 long int 포인터의 크기를 각각 테스트하고 있습니다. 많은 시스템에서 모든 포인터는 동일한 크기를 갖습니다.

아마도 이런 코드에 관심이있을 것입니다. *이 없음을 유의하십시오.

#include <stdio.h> 

int main() 
{ 
    short A; 
    int B; 
    long C; 

    printf("Size of integer variable = %d bytes\n", sizeof(A)); 
    printf("Size of integer variable = %d bytes\n", sizeof(B)); 
    printf("Size of integer variable = %d bytes\n", sizeof(C)); 
    return 0; 
}