我正在使用 python 开发一个项目,但我得到了 C 语言的示例代码,我只想知道FILE和 *fp 中的 * 是什么意思。给我的实际示例代码行是:
int read_data(FILE *fp, int *id, double *prob_unm, double prob_mut)
我正在使用 python 开发一个项目,但我得到了 C 语言的示例代码,我只想知道FILE和 *fp 中的 * 是什么意思。给我的实际示例代码行是:
int read_data(FILE *fp, int *id, double *prob_unm, double prob_mut)
在您的代码行中,fp
表示“文件指针”。在 C 标准库中,例如使用fopen
函数打开文件时,会返回一个FILE指针。FILE是一种保存文件信息的结构。它作为指针返回,因为需要对它的引用,因为它会被其他低级函数更改,例如。fclose
.
在 Python 中,等价物是一个文件对象,如file
oropen
函数返回的那个。
FILE 是一种数据类型——实际上是一种 C 结构。通常,它是通过调用“fopen()”来创建和返回的。
* 表示 read_data 需要一个指向 FILE 结构的指针,而不是整个数据结构本身。这很好,因为无论如何我们主要传递指向结构的指针。
因此,示例调用可能是:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE * fp;
int id = 123;
double prob_unm = 0.25;
double prob_mut = 0.5;
fp = fopen ("file.txt", "r");
int n = read_data(fp, &id, &prob_unm, &prob_mut)
fclose(fp);
printf("%d %d %lf %lf", n, id, prob_unm, prob_mut);
}
注意 int 和 double 参数上的 * s。即使我在上面的代码中将它们设置为 0.25 等值,它们是“*”的事实通常意味着该方法打算写入它们 - 所以上面的“printf”可能会显示不同的值根据我分配给他们的内容。
哦,我在函数调用中的“&”实际上是“*”的“相反”——这意味着,给定一个变量,返回一个指向该变量的指针。这就是 C 中通过引用传递的方式。