1

我正在尝试处理一个全局变量(矩阵 [])。

我的第一个问题是:什么是具有两个索引 ([x][x]) 的数组?我的第二个问题是:在 initialize(); 我正在尝试将 matrix[] 中的每个元素分配给“O”,但它似乎不起作用。

#include <stdio.h>

char matrix[4][10];

void initialize()
{
    matrix[4][10] = {{'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
                     {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
                     {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
                     {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'}};

}

int main(void)
{

} 

这段代码给了我以下错误:

error: cannot convert '<brace-enclosed initializer list>' to 'char' in assignment
4

4 回答 4

7

它被称为二维数组。

= {...};只能在声明数组的同一行中使用初始化。所以

char matrix[4][10] = {{....}};

会工作,但是

char matrix[4][10];
matrix = {{...}};

将不会。

如果要在某些函数中填充数组,则应使用循环:

for (int i = 0; i < 4; i++)
    for (int j = 0; j < 10; j++)
        matrix[i][j] = 0;

并且您将main函数留空,因此initialise永远不会调用函数。

于 2013-11-04T11:38:32.850 回答
3

这里不需要initialize,只需在定义点初始化变量:

char matrix[4][10] = {{'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
                      {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
                      {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
                      {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'}};
于 2013-11-04T11:36:39.843 回答
1
  1. Initialize()从 main调用函数。

  2. matrix[4][10]是单个字符。您无法像在函数中所做的那样进行初始化。

要么使用循环,memset() 要么使用两个循环。

于 2013-11-04T11:38:52.130 回答
0

您可以尝试以下代码M x N在运行时初始化可变大小矩阵,

int **Create(int M , int N) // `M` & `N` are dimensions of the matrix 
{
    int **a, i, j;
    a = (int **)malloc(M * sizeof(int *));   // Create array of pointers

    for (i = 0; i <= M-1; i++) // Create `M` rows, there addresses are stored in array
         a[i] = (int *)malloc(N * sizeof(int));
    return a; // return address of the matrix
 }

创建矩阵后,我们可以如下初始化元素,

for(i = 0; i <= row - 1; i++)
  for(j = 0; j <= col - 1; j++)
     scanf("%d", &a[i][j]);   // Read a[i][j]
于 2013-11-04T11:47:36.757 回答