对于重复调用函数fgetc(fp) 下形参fp值是否改变的问题
程序代码:
#include "stdio.h"
void main()
{
FILE *fp;
char fname[100],ch;
scanf("%s",fname);
while((fp=fopen(fname,"r+"))==NULL)
scanf("%s",fname);
getchar();
ch=fgetc(fp);
putchar(ch);
printf("%#o\n",fp); //这个是后来加的,验证fp的值到底有没变
ch=fgetc(fp);
putchar(ch);
printf("%#o\n",fp); //同上
fclose(fp);
}这个代码没什么意义,我只是想知道为什么
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
能达到按字符输出fp所指文件文本内容的目的,因为看上去感觉怎么也该是ch=fgetc(fp++)才对呀。。
所以我写了最上面那段代码,明白ch=fgetc(fp);重复使用以后,ch的值相当于fp所指文件文本下一个字符……以此类推。
所以就顺理成章的以为,在调用函数fgetc()之后,形参的指针应该是自增的,于是为了验证,分别在两个ch=fgetc(fp); 之后加了printf("%#o\n",fp);
但是得到的结果是前后的fp值都没有变,相当于说明指针fp没有因为fgtec()的调用而改变。。
这就郁闷了,那么为什么这样的代码还能行得通呢? 我想知道第二段代码为什么能行,或者是我验证的方式错了吗?









。。。明明指针没变但是字符却变了,那么在调用fgetc()以后,如果需要再次从头开始(从文件文本的第一个字符),那样虽然指针没变,却不知道当前要调用fgetc()的话,fp到底指向哪里了,除非一个一个数用了几次fgetc。。另外,这个情况下,重新用fp=fopen()能解决这个问题吗?