#include <stdio.h>
#include <stdlib.h>
int main(void) {
double** F = (double**) malloc(4097 * sizeof(double*));;
int flops = 0;
int i, j, k;
double r;
for (i=0; i<4097; i++) {
F[i] = (double*) malloc(4097*sizeof(double));
}
// insert code to initialize array elements to random values between 1.0 and 2.0
for (i=0; i<4097; i++) {
for (j=0; j<4097; j++) {
r = (double)rand()/(double)(RAND_MAX/2.0);
F[i][j] = r;
printf("%f %f\n", r, F[i,j]);
}
}
}
我正在尝试生成随机数并将它们存储到4097 x 4097数组中,但是当运行上面的代码时,数组不会更新。
答案 0 :(得分:1)
这一行
printf("%f %f\n", r, F[i,j]);
应该是
printf("%f %f\n", r, F[i][j]);
但是,它是有效语法的原因是因为逗号运算符。逗号运算符计算其操作数并仅产生最后一个操作数的值。所以,
printf("%f %f\n", r, F[i,j]);
相当于
printf("%f %f\n", r, F[j]);
然而,这有一个问题。 F[j]
的类型为double *
,而%f
则需要double
。海湾合作委员会警告说:
warning: format ‘%f’ expects argument of type ‘double’, but argument 3
has type ‘double *’ [-Wformat=]
提高编译器警告级别有助于捕获这些警告级别。
答案 1 :(得分:0)
为什么使用逗号运算符F[i,j]
?数组正确填充...只需将其替换为F[i][j]
即可验证。
另外,释放你的记忆。