[英]How sizeof operator works in c
我想知道 sizeof 運算符在 C 中是如何工作的。在下面的代碼中,我期望得到 output 1 但得到 4。因為 p 指向第一個位置,並且在第一個位置有字符,它的大小應該是一個。
main()
{
char a[9]="amit";
int *p=&a;
printf("%d",sizeof((char *)(*p)));
}
不,您要求的字符指針的大小在您的實現中為 4。
那是因為您將取消引用的int
指針p
轉換為char
指針,然后詢問它的大小。
分解它:
sizeof((char *)(*p))
| \__/
| \_ Dereference p to get an int.
\___________/
\_____ Convert that to a char * (size = 4).
如果你想處理你的int
的第一個字符(畢竟這是一個你已經投射的字符數組),你應該使用:
sizeof(*((char*)(p)))
那是int
指針,轉換回char
指針,然后取消引用。
打破它:
sizeof(*((char *)(p)))
| \________/
| \_ Get a char * from p (an int *)
\___________/
\_____ Dereference that to get a char (size = 1).
您將獲得強制轉換結果的大小(char *)
,這是一個大小為 4 的 char *。當然您可以說:
printf( "%d", sizeof(a[0]) );
有人想知道你為什么不這樣做?
對於上述問題,答案是 4。
在這里,您將 integer 指針類型轉換為 char 指針。
這意味着現在 integer 指針正在保存字符。
對於 sizeof 運算符,默認參數是 int。
當您像sizeof((char *)(*p))
一樣傳遞時,它會將其視為sizeof('a')
。 這個 char a 被提升為 int。 這就是你得到4的原因。
是的,在 32 位系統上,這段代碼應該顯示p 的大小為 4。在 16 位上,它會顯示 2(這些天在應用程序世界中沒有被高度使用,但可以在嵌入式世界中使用系統的要求)。 您已經對 char 進行了強制轉換,這將影響數據表示,但不會影響指向數據的指針占用的 memory。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.