C++中的数组初始化(不是字符串)

use*_*227 2 c++

我正在玩C++中的数组.我定义了一个名为matrix的二维数组,我将提取负值并将其分配给名为array的数组.

有没有办法快速将数组初始化为零而不是枚举所有元素?我查看了其他帖子和行,例如: int array[10] = {}或者 int array[10] = {0}不对我的编译器起作用.error: variable-sized object ‘array’ may not be initialized如果我尝试使用这些语句,我会收到错误消息.

我的教科书说所有数组在声明时都被初始化为零,但是我在我的编译器上测试过这个并不是真的.我不得不通过使用for循环强制它为零.这样做有正确的方法吗?

哦顺便说一句,我有一个mac并使用g ++进行编译.当我这样做时,man g++它说它是llvm-gcc编译器的符号链接.

#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;
}
Run Code Online (Sandbox Code Playgroud)

joh*_*ohn 5

我在这里猜测.

int array[10] = {0};
Run Code Online (Sandbox Code Playgroud)

是完全合法的,应该适用于任何编译器,但我认为你尝试过

int SIZE = 10;
int array[SIZE] = {0};
Run Code Online (Sandbox Code Playgroud)

这是完全不同的,而不是合法的.数组边界必须是常量,而不是变量.

有些编译器接受变量边界,但这并不合法.