【发布时间】:2013-07-16 07:25:15
【问题描述】:
main()
{
char a[] = "Visual C++";
char *b = "Visual C++";
printf("\n %d %d",sizeof(a),sizeof(b));
printf("\n %d %d",sizeof(*a),sizeof(*b));
}
sizeof(a) 给我输出:11(即字符串的长度)
为什么会这样?
为什么不是输出sizeof(a)=4,因为当我尝试打印a 时,它给了我一个地址值,因此是一个整数?
【问题讨论】:
-
阅读:What does sizeof(&arr) return? 给出了带有图表和工作代码的答案
-
而且,为了挑剔,
sizeof是一个运算符,而不是一个函数。 -
@Shivaji_Vidhale:“自从我尝试打印 a 时,我得到了一个地址。”还有一次,只有当你告诉它打印一个地址时,你才会得到一个地址。只是不要告诉它这样做,你的困惑就会消失。
-
@PHIfounder 我不这么认为。
sizeof()总是产生其参数的大小。也不例外。 -
@PaulGriffiths:这不是对语义的准确描述。
sizeof有一个明确的例外。 C 2011 6.3.2.1 3:“除非它是 sizeof 运算符、_Alignof 运算符或一元 & 运算符的操作数,或者是用于初始化数组的字符串文字,否则表达式类型为 ''array of type '' 被转换为类型为 ''pointer to type'' 的表达式,它指向数组对象的初始元素并且不是左值。”