【问题标题】:Can arrays inside functions be initialized with the return value of functions?Is "int arr[2]={strcmp("a","a"),strcmp("3","5")};" correct?函数内部的数组可以用函数的返回值初始化吗?是"int arr[2]={strcmp("a","a"),strcmp("3","5")};"正确的?
【发布时间】: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


【解决方案1】:

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

另一方面,写作:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    相关资源
    最近更新 更多