[英]Address as a operand in sizeof() operator
我只是在嘗試一個示例,當在sizeof
運算符中將地址作為參數傳遞時,我試圖檢查輸出,並且得到4的輸出。現在我的問題是,當在sizeof
運算符中傳遞指針時,為什么顯示4個字節當實際上沒有指針變量時,它只是一個地址?
#include<stdio.h>
int main()
{
int a=1;
int c;
c=sizeof(&a);
printf("%d\n",c);
return 0;
}
這是因為sizeof
根據C11 6.5.3.4 The sizeof and _Alignof operators /2
返回類型的大小, C11 6.5.3.4 The sizeof and _Alignof operators /2
(我強調):
sizeof運算符產生其操作數的大小(以字節為單位),該操作數可以是表達式或類型的括號名稱。 大小由操作數的類型確定。
6.5.3.2 Address and indirection operators /3
在同一標准中, 6.5.3.2 Address and indirection operators /3
涵蓋了a
是int
的&a
類型:
一元
&
運算符產生其操作數的地址。 如果操作數的類型為“類型”,則結果的類型為“類型的指針”。
換句話說, int a; sizeof(&a)
int a; sizeof(&a)
在功能上等效於sizeof(int *)
。
sizeof
運算符適用於操作數的類型 。
引用C11
,第6.5.3.4章( 重點是我的 )
sizeof運算符產生其操作數的大小(以字節為單位),該操作數可以是表達式或類型的括號名稱。 大小由操作數的類型確定。 [....]
&a
的類型為int *
,因此您的聲明與sizeof(int *)
。 結果是平台中指針的大小(指向整數)。
也就是說, sizeof
會產生一種size_t
類型的結果,
size_t
的變量 %zu
打印結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.