[英]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.