簡體   English   中英

在sizeof()運算符中作為操作數地址

[英]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涵蓋了aint&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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM