繁体   English   中英

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

[英]initializing a 2D array (Matrix) in C++

我正在尝试通过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;

我得到一个错误。

我该怎么做? 先感谢您。

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

使用您编写的内容,您正在编写一个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}};

编辑:表达式sizeof(matrix [i])给出数组的大小为40,因为编译器能够在编译时弄清楚这一点,但是依赖于此可能会有风险,因为如果将其更改为指针数组或将数组作为参数传递给函数,它将给出指针的大小而不是数组的大小(如此处所述: 如何在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的情况)可能会错过一个或改变一个多余的东西,这意味着其他事情,这可能会在其他地方引起问题)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM