在C ++中初始化2D数组(Matrix)

时间:2018-03-13 05:57:28

标签: c++ for-loop multidimensional-array

我试图通过for循环创建一个2D数组,但我得到一些垃圾随机数 代码:

unsigned int i, j;
int matrix[10][10];//={{},{}};

for (i = 0; i < sizeof(matrix[i])/sizeof(int); i++) {
    for (j = 0; j < sizeof(matrix[j])/sizeof(int); j++) {
        cout <<matrix[i][j] << " " << flush;
    }
    cout << endl;
}

当我将cout部分改为以下

cout <<matrix[i][j] = {{i},{j}} << " " << flush;

我收到错误。

我该怎么做? 先感谢您。

1 个答案:

答案 0 :(得分:1)

数组的维度是使用多少索引来访问它,这与维度的大小(维度的行中有多少个元素)不同,这与数组的大小不同或者完整数组中元素的数量。

根据您所写的内容,您正在编写一个包含10行的二维数组,每行包含10个元素,总大小为100个元素。

如果要在该语法中执行初始化列表,则必须在嵌套大括号中指定每一行和每个元素。您有一个顶级的大括号数组,然后是每个子数组的一组大括号。您可以使用括起每一行的花括号来指定每个元素作为逗号分隔列表:

unsigned int i, j;
int matrix[10][10] = {{1,2,3,4,5,6,7,8,9,10},
                     {1,2,3,4,5,6,7,8,9,10},
                     {1,2,3,4,5,6,7,8,9,10},
                     {1,2,3,4,5,6,7,8,9,10},
                     {1,2,3,4,5,6,7,8,9,10},
                     {1,2,3,4,5,6,7,8,9,10},
                     {1,2,3,4,5,6,7,8,9,10},
                     {1,2,3,4,5,6,7,8,9,10},
                     {1,2,3,4,5,6,7,8,9,10},
                     {1,2,3,4,5,6,7,8,9,10}};

EDITED:表达式sizeof(matrix [i])将数组的大小设置为40,因为编译器能够在编译时计算出来,但依赖于此可能会有风险,因为如果将其更改为指向数组的指针或数组作为参数传递给函数,它将给出指针的大小而不是数组(如下所述:How do I determine the size of my array in C?)。最好以已知长度显示这样的数组:

for (i = 0; i < 10; i++) {
    for (j = 0; j < 10; j++) {
        cout <<matrix[i][j] << " " << flush;
    }
    cout << endl;
}

通常,为了安全和方便更改,您可以使用宏来定义大小:

#define ROWS 10
#define COLS 10
int matrix[ROWS][COLS] = ...;

然后

for (i = 0; i < ROWS; i++) {
    for (j = 0; j < COLS; j++) {
        cout <<matrix[i][j] << " " << flush;
    }
    cout << endl;
}

这样,如果您决定在将来更改矩阵的大小,您只需在一个位置更改数字,宏定义,而不是通过代码寻找每个单独的常量(特别是重复的常量) 10,你可能会错过一个或更改一个意味着别的东西,这会在其他地方引起问题。)