「已注销」 2015-06-13 00:57 采纳率: 33.3%
浏览 1671
已采纳

c++初学者一枚,希望有好心人能够帮我解答这行代码的意思

该题为c++ primer plus 书籍中 第七章课后习题

这个double * fill_array(double *pfirst, double *pend)函数体中,
最后的return 返回了一个 --ptemp; 为什么要反回这个,这个位置有点看不懂,反回--ptemp是反回的什么东西?指针地址的自减吗?
另外: if (!cin) // bad input
{

cin.clear();
while (cin.get() != '\n')
continue;
cout << "Bad input; input process terminated.\n";
if(i == 0)
return ptemp;
else
return --ptemp;
}

这里也有 return --ptemp; 希望能有朋友帮我解答疑惑,感激不尽,为何要反回这个呢!

#include
const int Max = 5;

// function prototypes
double * fill_array(double *pfirst, double *pend);
void show_array( double *pfirst, double *pend);
void revalue(double *pfirst, double *pend, double r);

int main()
{
using namespace std;
double properties[Max];

double  *pos = fill_array(properties, properties+(Max-1));
show_array(properties, properties+(Max-1));
cout << "Enter revaluation factor: ";
double factor;
cin >> factor;
revalue(properties, properties+(Max-1), factor);
show_array(properties, properties+(Max-1));
cout << "Done.\n";
return 0;

}

double * fill_array(double *pfirst, double *pend)
{
using namespace std;
double temp;
double * ptemp;
int i = 0;

for (ptemp = pfirst; ptemp <= pend; ptemp++)
{
    cout << "Enter value #" << (i + 1) << ": ";
    cin >> temp;

    if (!cin)    // bad input
    {   
        cin.clear();
        while (cin.get() != '\n')
            continue;
       cout << "Bad input; input process terminated.\n";
       if(i == 0)
           return ptemp;
       else 
           return --ptemp;
    }
    else if (temp < 0)     // signal to terminate
        break;
    pfirst[i] = temp;
    i++;
}
return --ptemp;

}

// the following function can use, but not alter,
// the array whose address is pfirst
void show_array( double *pfirst, double *pend)
{
using namespace std;
double * ptemp;
int i = 0;
for (ptemp = pfirst; ptemp <= pend; ptemp++,i++)
{
cout << "Property #" << (i + 1) << ": $";
cout << *ptemp << endl;
}
}

// multiplies each element of ptemp by r
void revalue(double *pfirst, double *pend, double r)
{
double *ptemp;
for (ptemp = pfirst; ptemp <= pend; ptemp++)
*ptemp *= r;
}

  • 写回答

7条回答 默认 最新

  • devmiao 2015-06-13 01:12
    关注

    就你的代码来说
    return --ptemp;

    return ptemp - 1;
    没有区别
    这里返回的是数组最后一个元素的地址。

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

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?