3

我正在玩 C++ 中的数组。我定义了一个称为矩阵的二维数组,并将提取负值并将其分配给称为数组的数组。

有没有办法快速将数组初始化为零而不是枚举所有元素?我查看了其他帖子和行,例如: 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;
}
4

5 回答 5

6

我在这里猜测一下。

int array[10] = {0};

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

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

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

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

于 2013-11-08T21:26:09.417 回答
3

更改int SIZE = 10;const int SIZE=10;or enum{SIZE=10};,您{}的基础初始化应该可以工作。

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

于 2013-11-08T21:27:53.643 回答
1

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

整数数组[大小];

将其替换为:

int array[SIZE] = {};

如果您尝试这样做:

array[SIZE] = {}; 

稍后,它不会工作相同。在这种情况下,它会失败(当只有 [0]-[9] 时访问 [10])。

您也可以使用静态数组。

看:

如何将数组的所有成员初始化为相同的值?

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

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

您甚至可能只需要将 SIZE var 设为 const。

于 2013-11-08T21:25:07.980 回答
1

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

int array[10] = {0};

请参阅:C++ 中的数组初始化

于 2013-11-08T21:29:30.383 回答
0

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

整数数组[x];

memset(数组,0,x);

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

整数数组[10] = {0};

于 2013-11-08T21:28:17.323 回答