我正在尝试处理全局变量(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
答案 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)
从main调用函数Initialize()
。
matrix[4][10]
是一个字符。你不能像你在函数中所做的那样进行初始化。
使用循环和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]