【发布时间】:2013-05-09 06:59:35
【问题描述】:
难道只有静态存储类型的变量不应该被函数的返回值初始化,因为它们不被认为是常量吗?按照这个论点,下面的声明在 C 中是否有效。它编译时没有错误或警告,并且输出符合预期。
#include <stdio.h>
#include <string.h>
int main ()
{
int arr[2]={strcmp("a","a"),strcmp("3","5")};
printf("%d,%d",arr[0],arr[1]);
}
Result0,-1
【问题讨论】:
-
这是不言自明的。 y = { 后面的任何数组都会将数组索引设置为值。 strcmp 返回字符串之间的差异,这就是放入数组中的内容。它不是静态的,因为它在主堆栈框架中。
-
吹毛求疵,应该是
int main(void)。否则,代码没有任何问题。 (输出可能不同,得到0,-2将是另一个常见的输出。标准保证arr[1]是负数。)
标签: c arrays function constants array-initialization