我只是尝试使用零值初始化动态创建的矩阵:
#include <stdio.h>
#include <stdlib.h>
void writeMatrix (int **m, int size) {
int i, j;
for (i=0; i<size; i++) {
for (j=0; j<size; j++) {
printf("%i ", m[i][j]);
}
printf("\n");
}
}
int main(void) {
int i, size;
scanf("%i", &size);
int **m;
m = malloc(size * sizeof(int *));
for (i=0; i<size; i++) {
m[i] = malloc(size * sizeof(int));
m[i] = {0};
}
writeMatrix(m, size);
return 0;
}
但它与this error崩溃了:
compilation info
prog.c: In function 'main':
prog.c:23:10: error: expected expression before '{' token
m[i] = {0};
^
这不是将所有矩阵值设置为零的正确方法吗?
提前致谢。
答案 0 :(得分:3)
除非您在定义数组时初始化数组,否则不能使用m[i] = {0};
之类的语法。您要使用的是memset
:
memset(m[i], 0, size * sizeof(int));
或者您可以使用calloc
,它为数组分配内存并将其全部归零:
m[i] = calloc(size, sizeof(int));
答案 1 :(得分:2)
不,这是初始化静态数组的方法,而不是动态数组。
一般来说,你可以:
通过分配的int
数组的每个元素并将其设置为0.
for(int j = 0; j&lt; size; ++ j) { m [i] [j] = 0; }
使用memset
将数组的所有值设置为0。
memset(m [i],0,size * sizeof(int));
使用calloc
而不是malloc
分配与malloc
类似的内存,并将所有分配的内存设置为0。