【发布时间】:2013-02-06 09:35:45
【问题描述】:
我的问题是当传递的参数是 动态数组 可变长度数组时,sizeof() 的行为究竟如何。
让我们考虑一个例子:
int fun(int num_of_chars)
{
char name_arr[num_of_chars] = {0};
/* Do something*/
return sizeof(name_arr);
}
在这个例子中,很明显返回值不是一个编译时间常数。因为大小取决于num_of_chars 的运行时值。
引用 C99 标准 (6.5.3.4):
sizeof运算符产生其操作数的大小(以字节为单位),可能是 表达式或类型的括号名称。大小由 操作数的类型。结果是一个整数。如果操作数的类型是 变长数组类型,对操作数求值;否则,操作数是 未计算,结果是一个整数常量。
我可以从 [....操作数被评估....] 了解到,当为 sizeof() 传递的参数是一个 动态数组 可变长度数组时, sizeof()“表现得像”一个函数,而不是一个运算符。
我的理解对吗?
【问题讨论】:
-
sizeof()仍然是运算符;当参数是可变长度数组时,它不再生成编译时常量。 -
你的代码能编译吗?我收到
variable-sized object may not be initialized错误