在学习本书过程中,我遇见了很多问题,先罗列如下,希望得到大家的帮助
1,第27页写道,将pi的初值设为ival所在的内存地址:int *pi=&ival
  是不是应该改成 int pi =&ival
   请问,两者有什么区别?
2,第33页有一语句:iofile.seekg(0)
   接着书中说,seekg()可以将文件位置重新定位至文件的起始处,那么,是不是该文件原有的内容都被丢弃了?
3,第208页,练习中,作者提出的问题如何解决
  也就是如何修改那个错误?

解决方案 »

  1.   

    这本书我没看过,但你的前两个问题我可以回答:
    1.不应该改,原书的写法没错,int *pi将pi声明为一个指针变量,而int pi将pi声明为一个整型变量,而保存内存地址的变量应该为指针类型。
    2.读写文件时,为了方便操作,设置了一个文件读写指针,这是从C的文件函数库中就开始的,但设置这个指针,只是为了指示下一次文件读写的位置,修改文件指针的值并不会对文件内容发生任何影响,只要你在后面不写文件,不修改文件的长度,那么文件原有的内容是不会被丢弃的。
    第3个问题,恕我没看过此书,不知道内容,无法回答。
      

  2.   

    第三个问题是:在以下的语句中
      for (int sum=0,ix=0;ix<ivec.size();++ix)
       sum+=ivec[ix];
      int average=sum/ivec.size();
    作者说,根据c++ standard,sum的生存范围局限于上述的for循环中,此处的sum会造成undefined symbol编译错误,请问如何修改这个错误?
      

  3.   

    1、楼上所言正确&ival为地址。如果int pi=&ival 则pi的值为ival的地址.和原文意思不符.
    2、文件中操作中的seek()函数仅修改文件指针就象我们用++运算符修改数组指针一样。文件的内容是不会改变的。
      

  4.   

    应改为:
    for (int sum=0,ix=0;ix<ivec.size();++ix)
      {
     sum+=ivec[ix];
     int average=sum/ivec.size();
    }
      

  5.   

    不同意,每次循环都要计算平均值,太浪费计算能力了,把sum的定义提前到循环开始之前就可以了:
    int sum=0;
    for (ix=0;ix<ivec.size();++ix)
       sum+=ivec[ix];
      int average=sum/ivec.size();
    要是怕引起sum的作用域的改变影响程序的话,这段代码之前加一个{,后面加一个},把它定义为一个块。
      

  6.   

    第三个问题是:在以下的语句中
     for (int sum=0,ix=0;ix<ivec.size();++ix)
       sum+=ivec[ix];
     int average=sum/ivec.size();
    作者说,根据c++ standard,sum的生存范围局限于上述的for循环中,此处的sum会造成undefined symbol编译错误,请问如何修改这个错误?
    -------------------------------------------------------------------
    根据c++ standard,sum的生存范围局限于上述的for循环中,修改可以按 roland_c(凤凰)  , 但VC在这方面不符合c++ standard,以上代码在VC中完全可用,无需任何修改
      

  7.   

    书上还有一句话:vector<int> *pv=0
                  pv可以依次指向每一个用以表示数列的vector,当然,我们也可以将数列的内存地址赋值给他:pv=&lucas    其中lucas代表数列名
    请问,这里pv的值不就是一个内存地址么??
      

  8.   

    是不是定义为指针后的pv就相当于没有定义之前的*pv呀
    希望大家解释清楚一些,拜托了