weixin_36978036 2017-06-11 03:27 采纳率: 66.7%
浏览 1044
已采纳

有关文件指针的一点问题

#include
using namespace std;
int main()
{
int n;
FILE *fp1 = fopen("2.dat", "rb+");
FILE *fp2 = fopen("2.dat", "rb+");
while(1) //文件中只有1 2 3 4这四个整数
{
fread(&n, sizeof(int), 1, fp1);
if(feof(fp1))
break;
cout << n << endl;
}
fseek(fp1, 0, 0);
fp2 = fp1; //令fp2 = fp1
fseek(fp1, sizeof(int)*2, 1);
fread(&n, sizeof(int), 1, fp2);
cout << n << endl; //我瞬间懵了 我移动了fp1 fp2为什么也跟着动了
fclose(fp1);
fclose(fp2);
}

附上输出
1
2
3
4
3

  • 写回答

2条回答 默认 最新

  • 战在春秋 2017-06-11 06:25
    关注

    可我只移动了fp1 fp2没动啊

    理解上有些偏差,实际上fp1和fp2都没有移动,执行fseek函数后,变化的是与fp有关的 文件位置指针
    您可以断点调试,查看fp1,fp2的值,都没有变化。

    看一下fseek函数的功能:

     fseek(文件类型指针fp,位移量,起始点);  // 把与fp有关的文件位置指针放到一个指定位置。
    

    进一步:

    FILE *fp1 = fopen("2.dat", "rb+");  
    FILE *fp2 = fopen("2.dat", "rb+");
    

    由以上代码可知:fp1和fp2都关联同一个文件 2.dat。
    所以fp1和fp2对应的是同一个文件位置指针。

    因此:

    fseek(fp1, sizeof(int)*2, 1);     //2.dat文件位置指针发生变化
    fread(&n, sizeof(int), 1, fp2);  //在新的文件位置指针对2.dat文件进行读操作
    

    综上就产生题目描述的现象。

    用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化