作为sizeof()运算符的操作数的地址

Nos*_*iii 1 c sizeof

我只是尝试一个例子,当一个地址作为sizeof 运算符中的参数传递时我试图检查输出,我输出为4.现在我的问题是当你在sizeof运算符中传递指针时为什么它显示4个字节的内存实际上没有指针变量时,它只是一个地址?

#include<stdio.h>
int main()
{
  int a=1;
  int c;
  c=sizeof(&a);
  printf("%d\n",c);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 7

这是因为sizeof返回一个类型的大小,按照C11 6.5.3.4 The sizeof and _Alignof operators /2我的强调:

sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的带括号的名称.大小由操作数的类型确定.

的类型的&a,其中a的一个int是由覆盖6.5.3.2 Address and indirection operators /3在相同的标准:

一元运算&符产生其操作数的地址.如果操作数的类型为"type",则结果的类型为"指向类型的指针".

换句话说,int a; sizeof(&a)在功能上等同于sizeof(int *).