2

不仅静态存储类型的变量不应该被函数的返回值初始化,因为它们不被认为是常量吗?按照那个论点,下面的声明在 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]);
}

Result 0,-1

4

1 回答 1

0

静态变量不能用函数的返回值初始化的说法是正确的,但是在你的例子中,arr不是静态变量,而是存储在堆栈中的变量,所以这段代码是完全有效的。

另一方面,写:

static int arr[2]={strcmp("a","a"),strcmp("3","5")};

由于您解释的原因,将是非法的。

于 2013-05-15T10:30:29.720 回答