我尝试使用XCode 6.1.1打印出具有以下功能的两个数组:
for (int j=0; j<4; j++) {
for (int k=0; k<4; k++) {
printf("%2d ", Lattice[0][j+N*k]);
}
printf(" ");
for (int k=0; k<4; k++) {
printf("%2d ", Lattice[1][j+N*k]);
}
printf("\n");
}
printf("\n");
调用函数时一切正常, 只要我以前不打印浮动。 打印int时,没有问题。所以它是一个 有点奇怪吧? 我正在这样初始化数组:
int **Lattice = (int**)malloc(2*sizeof(int*));
if (Lattice == NULL) return NULL;
for (int i=0; i<2; i++){
Lattice[i] = (int *)malloc(2*sizeof(int));
if (Lattice[i] == NULL) {
for (int n=0; n<i; n++)
free(Lattice[n]);
free(Lattice);
return NULL;
}
else{
for (int j=0; j<N; j++) {
for (int k=0; k<M; k++) {
Lattice[i][j+N*k] = 0;
}
}
}
}
return Lattice;
太糟糕了,我无法上传输出图片。
矩阵应该只显示零,但是浮点数 在某些条目中会有很多数字我无法解释。
我很感激任何提示。 谢谢。
答案 0 :(得分:1)
所以你的代码有一些非常严重的问题。
Lattice[0]
和Lattice[1]
需要维度4x4才能使您的代码打印块有意义。顺便说一下,这意味着N
和M
也需要等于4,或者您需要将打印for
循环条件分别更改为j < N
和k < M
。
您的malloc
也需要为此分配空间,因此:Lattice[i] = (int *)malloc(N * M * sizeof(int));
这会导致循环正常工作,但代码中的任何位置都没有浮点数。您无法使用printf
将int
打印为float
。该值不会被提升。它只会被视为float
。