作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的程序中的其他地方有一个数组:
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++ 给了我
一元“&”中的左值无效
我尝试了很多不同的方法来让它发挥作用,这真的让我压力很大:(
你知道我做错了什么吗?
非常感谢:)
最佳答案
在 C 中,指向 int 的指针 (int *
) 变量保存整数的地址,也可用于保存多个数组中第一个整数的地址,因为只需添加第一个整数的地址即可达到第二个及后续整数。 malloc()
为您提供一个内存块的地址,您将使用该内存块来保存lines
个连续整数,因此您应该将它提供的地址存储在指针中 - to-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]
在各方面都是等价的。
关于无法将 fscanf 转换为双解引用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356195/
我是一名优秀的程序员,十分优秀!