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

时间:2013-11-08 21:18:42

标签: 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;
}

5 个答案:

答案 0 :(得分:5)

我在这里猜测。

int array[10] = {0};

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

int SIZE = 10;
int array[SIZE] = {0};

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

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

答案 1 :(得分:3)

int SIZE = 10;更改为const int SIZE=10;enum{SIZE=10};,您的基于{}的初始化应该有效。

您不小心使用了gcc扩展名,允许使用可变大小的数组。

答案 2 :(得分:1)

您需要做的就是在您拥有的顶部:

int array [SIZE];

将其替换为:

int array[SIZE] = {};

如果您尝试这样做:

array[SIZE] = {}; 

稍后,它将无法正常工作。 在这种情况下,它会失败(当只有[0] - [9]时访问[10])。

您也可以使用静态数组。

请参阅:

How to initialize all members of an array to the same value?

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

http://www.cplusplus.com/reference/array/array/?kw=array

你甚至可能只需要制作SIZE var const。

答案 3 :(得分:1)

这应该有效,并且会对剩余的9个元素进行零初始化。

int array[10] = {0};

请参阅:Array initialization in C++

答案 4 :(得分:0)

如果数组大小与变量有关,则必须:loop through或

  

int array [x];

     

memset(array,0,x);

如果数组大小是硬编码的,您可以:

  

int array [10] = {0};