我的程序中的其他地方有一个数组:
data=malloc(sizeof(int)*lines);
我想将文件中的数据读入此数组。我打开了文件等。
我创建了一个函数来将数据读入这个数组:
int readfile(FILE* fp,int** storage_array,int lines)
{
int i=0;
for(i=0; i<lines; i++)
{
fscanf(fp,"%lf",&(**storage_array+i));
}
rewind(fp);
return 0;
}
Dev c ++给了我
invalid lvalue in unary '&'
我尝试了很多不同的方法让它发挥作用,这真的让我很紧张:(
你有没有想到我做错了什么?
非常感谢:)
答案 0 :(得分:0)
您应该仔细查看使用指针的方式及其在问题中的显示...
void
功能.... 见下文......错误检查被省略....
void readfile(FILE* fp,int** storage_array,int lines)
{
int i=0;
for(i=0; i<lines; i++)
{
int readval = 0;
fscanf(fp,"%d",&readval);
*(storage_array[i]) = readval;
}
rewind(fp);
}
答案 1 :(得分:0)
在C中,指向int(int *
)变量的变量保存整数的地址,也可以用于保存多个数组中第一个整数的地址,因为你可以到达第二个和后续的整数只是添加到第一个地址。 malloc()
为您提供了一个内存块的地址,您将用它来保存lines
个连续的整数,因此您应该将它给出的地址存储在指针到int的变量中,以及相关的readfile()
参数也应该具有此类型。
在readfile()
内,您希望为fscanf()
调用第i个整数的地址。您只需将i
添加到原始地址即可获得此功能,因为C负责为您i
乘以sizeof (int)
:
int *data;
data=malloc(sizeof(int)*lines);
readfile(fp, data, lines);
...
free(data); /* Don't forget to release the memory eventually */
...
int readfile(FILE* fp,int* storage_array,int lines)
{
int i=0;
for(i=0; i<lines; i++)
{
fscanf(fp,"%lf",storage_array+i);
}
rewind(fp);
return 0;
}
fscanf()
行可以等效编写
fscanf(fp,"%lf",&(*(storage_array+i)));
甚至
fscanf(fp,"%lf",&storage_array[i]);
因为在C中,表达式*(a + b)
和a[b]
在各个方面都是等价的。