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

「已注销」 2015-06-13 09:10:31
该题为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;
}
...全文
165 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlmlczcmlvsaav 2015-06-13
  • 打赏
  • 举报
回复
double * fill_array(double *pfirst, double *pend); 这个函数的意思应该是填充数组并且返回数组最后一个值的指针吧。 for (ptemp = pfirst; ptemp <= pend; ptemp++) 这个for循环里面 ptemp跟pend做比较,从而控制循环退出。当ptemp等于了pend 再执行一次循环,ptemp就大于pend了,所以这个时候要得到数组的尾指针 ,就要用--ptemp, --放在变量前的意思是先对变量进行减操作,再使用减过后得到的值 问题还有,既然要得到尾指针,为什么不直接返回pend呢,因为代码里有这一段 else if (temp < 0) // signal to terminate break; 意思就是输入0 就停止填充数组,也就是说数组不一定被填充满了,函数只返回填充到那个数的指针。因为在这次循环里,ptemp已经被++了,只是输入的是0, 所以没有填充数字到这个指针指向的位置,所以这个不是数组的尾巴,还是要--ptemp 才指向数组的尾巴。 不知道解答了你的疑惑没有
king191923157 2015-06-13
  • 打赏
  • 举报
回复
for (ptemp = pfirst; ptemp <= pend; ptemp++) 因为有个 ptemp++,所以要减回去
这个是完整源码 java实现 大数据 Spark 可视化大屏+Kafka+SpringBoot+Vue3 【大数据毕业设计】基于Spark实时社交媒体舆情分析与趋势预测(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 源码+论文 完整版 数据库Mysql 随着微博、抖音、知乎、小红书等社交媒体平台的快速发展,网络舆情呈现出数据规模大、传播速度快、情绪演化复杂等特点。传统离线批处理方式难以满足舆情监测对时效性的要求,亟需构建一套能够支撑实时采集、流式计算、情感分析与趋势预测的综合系统。本文围绕“基于Spark实时社交媒体舆情分析与趋势预测”课题,设计并实现了一套前后端分离的舆情分析平台。系统后端采用Java语言与Spring Boot框架构建RESTful服务,结合JWT完成管理员身份认证与权限控制;数据处理层引入Spark思想的流式窗口统计与Kafka消息缓冲机制,对社交媒体帖文进行情感倾向识别、热度指数计算和按小时窗口聚合;趋势预测模块基于历史热度序列构建多元线性回归模型,输出未来窗口的热度预测值,并采用RMSE、MAE、MAPE等指标评价预测效果;前端采用Vue3、Vue Router、Pinia、Element Plus与ECharts实现管理后台与数据可视化大屏,支持帖文管理、话题管理、实时舆情查看、趋势对比和个人中心维护等功能。数据库选用MySQL,库名为db_social_opinion,核心业务表均以t_前缀命名,覆盖管理员、用户、平台、话题、帖文、实时统计、预测结果与误差指标等实体。测试结果表明,系统能够稳定完成舆情事件模拟、实时统计刷新与趋势预测展示,界面日期时间统一采用“2026-11-02 17:25:17”格式,满足本科毕业设计对完整性、规范性与可演示性的要求。本文工作对高校舆情教学实验、中小规模舆情监测系统原型开发具有一定

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧