Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用声明的变量初始化数组_C_Arrays_Pointers_Variables_Initialization - Fatal编程技术网

C 使用声明的变量初始化数组

C 使用声明的变量初始化数组,c,arrays,pointers,variables,initialization,C,Arrays,Pointers,Variables,Initialization,我已经尝试了下面的代码,但不起作用。如果我给出常量,则显示“初始值设定项元素不是常量”的错误。。它仍然不起作用。请帮忙 #include<stdio.h> int* ret() { int x=0; int y=0; int b[]={x,y}; return b; } int main() { printf("My name is sudha\n\n"); int* m=ret(); for(int i=0;i<2;i

我已经尝试了下面的代码,但不起作用。如果我给出常量,则显示“初始值设定项元素不是常量”的错误。。它仍然不起作用。请帮忙

#include<stdio.h>

int* ret()
{
    int x=0;
    int y=0;
    int b[]={x,y};
    return b;
}
int main()
{
    printf("My name is sudha\n\n");
    int* m=ret();
    for(int i=0;i<2;i++)
    printf("%d",m[i]);
    return 0;
}
#包括
int*ret()
{
int x=0;
int y=0;
int b[]={x,y};
返回b;
}
int main()
{
printf(“我的名字是sudha\n\n”);
int*m=ret();

对于(int i=0;i,代码中有两个错误:

  • 您正在初始值设定项中使用非常量表达式,并且
  • 您正在从函数返回指向本地的指针
这可以通过返回手动初始化的-ed数组来修复:

int* ret() {
    int x=0;
    int y=0;
    int *b = malloc(2 * sizeof(*b));
    b[0] = x;
    b[1] = y;
    return b;
}
完成后,您需要查看结果:

int* m=ret();
for(int i=0;i<2;i++)
    printf("%d",m[i]);
free(m); // <<=== Add this call
int*m=ret();

对于(int i=0;i可能的重复项为我编译并运行,但是当您printf()时,您正在访问未分配的内存,这是未定义的行为。一旦ret()返回int b[]没有人知道为什么在VisualStudioC++中我会这样编译?在C和C++之间如何初始化数组有很大的不同。我总是不允许使用新的可变长度数组,但是我的编译器允许我用随机数初始化数组的值。GCC编译器编译它。唯一的问题是R。et()函数返回一个指向c中未定义行为的局部变量的指针。此外,它不会在C89中编译,因为循环初始化i。@MCG:如果使用标准兼容模式,则不会编译。使用
malloc
不会更改数组“初始化”,因为
malloc
ed数组可能有noi初始化器。自动/静态数组可以使用相同的初始化器。唯一可能使用
malloc
的点是数组的生存期。还有其他方法可以实现这一点。@Olaf对我来说,这是“帮助我修复此代码”问题。我从提供初始值的更广泛意义上理解初始化。如果除了
malloc
之外,还有其他方法可以将数组的生存期保留在分配给它的函数之外,而不使数组
成为静态的或全局的,我很想知道它是什么。您可以在解构一个结构,并返回该结构。@DasBinkenLight:是的,这个术语是含糊不清的。但在这里,它显然是在标准意义上使用的:用定义设置值。我在注释中故意使用引号表示我指的是正常的初始赋值。我没有排除静态数组作为选项(没有“全局”选项)变量;它们只是静态的)。谢谢你的回答。但是@dasblinkenlight的代码仍然不能工作