[英]Error when setting all values in array to zero
我只是想用零值初始化一个动态创建的矩阵:
#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;
}
但它因此错误而崩溃:
compilation info
prog.c: In function 'main':
prog.c:23:10: error: expected expression before '{' token
m[i] = {0};
^
这不是将所有矩阵值设置为零的正确方法吗?
提前致谢。
你不能使用像m[i] = {0};
这样的语法m[i] = {0};
除非您在定义数组时对其进行初始化。 您要使用的是memset
:
memset(m[i], 0, size * sizeof(int));
或者您可以使用calloc
,它为数组分配内存并将其全部清零:
m[i] = calloc(size, sizeof(int));
不,这是初始化静态数组的方法,而不是动态数组。
一般来说,您可以:
传递已分配的int
数组的每个元素并将其设置为 0。
for (int j = 0; j < size; ++j) { m [i][j] = 0; }
使用memset
将数组的所有值设置为 0。
memset(m[i], 0, size * sizeof(int));
使用calloc
而不是malloc
分配内存类似于malloc
并将所有分配的内存设置为 0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.