2D数组元素不会在C中保存值

时间:2015-12-02 22:39:33

标签: c arrays

#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数组中,但是当运行上面的代码时,数组不会更新。

2 个答案:

答案 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]即可验证。

另外,释放你的记忆。