#include <stdio.h>
FILE * Openfile(char *filename,char *mode, FILE *fp);
int main(){
FILE *fp=NULL;
char *filename = "simple_index.file";
char *openmode = "w";
printf("FP(before call function):%p\n", fp);
FILE *newfp = Openfile(filename, openmode, fp);
printf("FP(after call function): %p\nNEWFP: %p\n", fp, newfp);
return 0;
}
FILE * Openfile(char *filename,char *mode, FILE *fp){
printf((fp = fopen(filename, mode)) ? "Good opening %s file\n": "Error open %s file\n", filename);
return fp;
}
Run Code Online (Sandbox Code Playgroud)
结果:
FP(before call function):0x0
Good opening simple_index.file file
FP(after call function): 0x0
NEWFP: 0x800bc7140
Run Code Online (Sandbox Code Playgroud)
在使用函数打开调用Openfile()函数中的文件后,指向文件结构的指针不存储打开文件的地址.
为什么FP在使用功能后不保存状态?为什么需要回来保存?
这是因为C使用pass-by-value进行函数参数传递.
如果你想对从该函数本身作为参数传递的变量进行更改,你需要一个指向该变量的指针传递给函数,并且在函数内部,你可以修改由该函数指向的值.指针和调用者,它将持续存在.
否则,要从被调用函数返回值,通常我们return将值分配给调用函数中的变量.
fopen 存储更新的指针,但访问您需要提供指针的地址.
试试:
FILE *newfp = Openfile(filename, openmode, &fp);
FILE * Openfile(char *filename,char *mode, FILE **fp){
printf((*fp = fopen(filename, mode)) ? "Good opening %s file\n": "Error open %s file\n", filename);
return *fp;
}
Run Code Online (Sandbox Code Playgroud)
现在*fp,newfp将打印相同的值
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |