C+中的数组初始化+;(不是字符串) 我在C++中玩数组。我定义了一个名为matrix的2d数组,将提取负值并将其分配给名为array的数组

C+中的数组初始化+;(不是字符串) 我在C++中玩数组。我定义了一个名为matrix的2d数组,将提取负值并将其分配给名为array的数组,c++,C++,有没有办法将数组快速初始化为零,而不是枚举所有元素?我浏览了其他帖子和行,比如:intarray[10]={}或 int数组[10]={0}在我的编译器上不起作用。我收到错误消息error:如果我尝试使用这些语句,可能无法初始化可变大小的对象“array” 我的课本上说,所有数组在声明时都初始化为零,但我在编译器上测试了这一点,结果不是这样;我必须使用for循环将其强制为零。有没有正确的方法 哦,顺便说一下,我有一台mac电脑,使用g++进行编译。当我执行mang++时,它表示它是指向llvmg

有没有办法将数组快速初始化为零,而不是枚举所有元素?我浏览了其他帖子和行,比如:
intarray[10]={}
int数组[10]={0}
在我的编译器上不起作用。我收到错误消息
error:如果我尝试使用这些语句,可能无法初始化可变大小的对象“array”

我的课本上说,所有数组在声明时都初始化为零,但我在编译器上测试了这一点,结果不是这样;我必须使用for循环将其强制为零。有没有正确的方法

哦,顺便说一下,我有一台mac电脑,使用g++进行编译。当我执行
mang++
时,它表示它是指向llvmgcc编译器的符号链接

#include<iostream>

const int NROWS = 4, NCOLS = 5;
int matrix[][NCOLS] = {    16,  22,  99,  4, 18, 
                         -258,   4, 101,  5, 98, 
                          105,   6,  15,  2, 45, 
                           33,  88,  72, 16, 3};

int main()
{
    int SIZE = 10;
    int array[SIZE];
    int count=0;

    // Values of array before initalized    
    for(int i = 0; i < SIZE; i++)
    {
        std::cout << array[i] << " ";
    }    
    std::cout << std::endl;

    //Initialize array to zero
    for(int i = 0; i < SIZE; i++)
    {
        array[i]=0;
        std::cout << array[i] << " ";
    }    
    std::cout << std::endl;

    // Extract negative numbers and assign to array
    for(int i = 0; i < NROWS; i++)
    {
        for(int j = 0; j < NCOLS; j++)
        {
            printf("matrix[%i,%i]=%5i\n",i,j,matrix[i][j]);

            if(matrix[i][j] < 0)
            {
                array[count] = matrix[i][j];
                printf("\tarray[%d]= %4d",count, matrix[i][j]);
                printf("\tcount=%d\n", count);
                count++;                
            }
        }

    }

    // Values of array
    for(int i = 0; i < SIZE; i++)
    {
        std::cout << array[i] << " ";
    }

    std::cout << std::endl;

    return 0;
}
#包括
常数int NROWS=4,NCOLS=5;
int矩阵[][NCOLS]={16,22,99,4,18,
-258,   4, 101,  5, 98, 
105,   6,  15,  2, 45, 
33,  88,  72, 16, 3};
int main()
{
int SIZE=10;
int数组[大小];
整数计数=0;
//初始化前数组的值
对于(int i=0;istd::cout您需要做的是在顶部,您有:

int数组[大小]

替换为:

int array[SIZE] = {};
如果您试图这样做:

array[SIZE] = {}; 
后来,它就不起作用了。 在这种情况下,它将失败(当只有[0]-[9]时访问[10])

也可以使用静态数组

见:

或者,如果要使用STL数组类型,可以查看:


您甚至可能需要将大小变为常量。

我在这里进行猜测

int array[10] = {0};
是完全合法的,应该适用于任何编译器,但我想你已经尝试过了

int SIZE = 10;
int array[SIZE] = {0};
这是完全不同的,而且不合法。数组边界必须是常量,而不是变量


一些编译器接受变量边界,但这并不使其合法。

int SIZE=10;
更改为
const int SIZE=10;
enum{SIZE=10};
,基于
{}
的初始化应该可以工作


您无意中使用了允许可变大小数组的gcc扩展。

如果数组大小取决于变量,则必须:循环或

int数组[x]

memset(数组,0,x)

如果阵列大小是硬编码的,则可以:

int数组[10]={0}


这应该可以工作,并将初始化剩余的9个元素

int数组[10]={0};


请参阅:

它必须是数组吗?“我的教科书上说,所有数组在声明时都初始化为零”,那么就扔掉那本教科书。教科书还应该告诉您
int SIZE=10;int array[SIZE]你不能总是依赖编译器来告诉你合法和非法C++的区别,你需要一本好的文本书。你去哪里了解编译器的细微差别,看看变量或数组的声明或初始化是否设置为零?我明白了。我必须做代码> const int大小=10;< /C++ >。这就是我收到错误消息的原因。必须将大小声明为常量才能正常工作。感谢各位,我似乎忘记了将大小声明为常量。必须执行
const int SIZE
才能正常工作!!