【发布时间】:2011-01-22 01:18:32
【问题描述】:
我不确定为什么这没有返回应有的内容,也许你们中的一个可以帮助我。我在 C 中有以下 for 循环:
for (i=0; i<nrow; i++) {
dat[k]=l.0;
k++;
}
现在,您会认为这会将dat 的所有值(其中有nrow 值)设置为1.0;相反,它被设置为 0。程序编译良好,一切顺利。内存已正确分配,dat 定义为double。
这是产生 0 的原因吗?我猜 0 来自 dat 变量的初始化(因为我使用 calloc 进行内存分配,它应该将变量初始化为 0(但并非总是如此))。
编辑:请注意,我没有将其定义为dat[i] 是有特定原因(这很重要)。此外。 k 被定义为整数并被初始化为 0。
编辑2:下面是整个代码:
#include "stdio.h"
#include "stdlib.h"
#define NCH 81
// Generate swap-mode data for bonds for input.conf file
int main()
{
int i,j,k;
int **dat2;
double *dat;
int ns = 500;
int nrow = NCH*(ns-1);
dat = (double*) calloc(nrow, sizeof(double));
dat2 = (int**) calloc(nrow,sizeof(int*));
/*for (i=0; i<nrow; i++) {
dat2[i] = (int*) calloc(2, sizeof(int));
for (j=0; j<2; j++)
dat2[i][j] = 0;
}*/
k=0;
printf("\nBreakpoint\n");
/*for (i=0; i<81; i++) {
for (j=0; j<250; j++) {
dat[k] = j+1;
k++;
}
for (j=251; j>1; j++) {
dat[k] = j-1;
k++;
}
}*/
FILE *inp;
inp = fopen("input.out", "w");
for (i=0; i<nrow; i++) {
dat[k]=1.0;
k++;
}
//fprintf(inp, "%lf\n", dat[i]);
printf("%d", dat[nrow]);
printf("\nDone\n");
fclose(inp);
return 0;
}
谢谢! 阿米特
【问题讨论】:
-
有什么理由你在 1.0 中有一个 l 而不是 1?此外,其余代码将很有用(在其中初始化指针和变量),因为这会对结果产生影响。此外,当您将它们打印出来时,您可能没有正确地迭代或访问数组中的值。
-
是 dat[k] = 'ell'.0;而不是
one.0在此处或在您的源中转录时出现拼写错误? -
其余代码已提供