数组和全局变量

时间:2013-11-04 11:27:31

标签: c

我正在尝试处理全局变量(matrix [])。

我的第一个问题是:什么是带有两个索引([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 个答案:

答案 0 :(得分: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函数。

答案 1 :(得分: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'}};

答案 2 :(得分:1)

  1. 从main调用函数Initialize()

  2. matrix[4][10]是一个字符。你不能像你在函数中所做的那样进行初始化。

  3. 使用循环和memset()来做 要么 使用两个循环。

答案 3 :(得分: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]