求大神帮忙解答一下这个程序

龔妞妞妞妞 2014-11-18 05:02:27
一道书上的习题,已经正确可以运行了。

#include<iostream.h>
int count(double *a)
{
double *p=a;
while(*p!=0)
p++;
return(p-a);
}
void main()
{
double a[]={1.0,2.0,8.0,3.0,0.0,4.0,7.0};
cout<<count(a);
}



-------------------------------------------------------------------
运行结果是4.这是为什么?
...全文
264 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-11-21
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。) 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗? 不要写连自己也预测不了结果的代码!
赵4老师 2014-11-21
  • 打赏
  • 举报
回复
引用 10 楼 erac 的回复:
感觉这道题不精准呀,记得原来书上明确说对于浮点数来说,不能直接和0来判断是否为0.
那也分情况。 http://bbs.csdn.net/topics/390676437
Y神圣 2014-11-20
  • 打赏
  • 举报
回复
感觉这道题不精准呀,记得原来书上明确说对于浮点数来说,不能直接和0来判断是否为0.
liangkdm 2014-11-20
  • 打赏
  • 举报
回复
地址相减就是表示中间有几个该类型的元素 a[4] = 0.0 a[0] = 1.0
赵4老师 2014-11-19
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
赵4老师 2014-11-19
  • 打赏
  • 举报
回复
从0开始数,0.0位于数组中的第4个。
robertbo 2014-11-19
  • 打赏
  • 举报
回复
就计算逻辑上来说,因为p的初始值是a,然后在while循环里执行了4次,所以他们想减是等于4。
jack_guanggong 2014-11-18
  • 打赏
  • 举报
回复
在一些特定环境下,不能够直接使用double类型是否与零相等。
li4c 2014-11-18
  • 打赏
  • 举报
回复
因为当他跳出循环时候,p++这个语句正好执行了4次啊
starytx 2014-11-18
  • 打赏
  • 举报
回复
引用 2 楼 qq_18461679 的回复:
[quote=引用 1 楼 robertbo 的回复:] return(p-a),返回的是地址差,结果为4,是正确的啊。 p和a都是指针,做减法运算的话是地址的减法。
不明白什么是地址的减法。。。。 可以详细说一下为什么结果是4吗?[/quote] 可以简单理解为数组里边元素位置的差值,很明显0.0的位置比首元素的位置多4个单位
龔妞妞妞妞 2014-11-18
  • 打赏
  • 举报
回复
引用 1 楼 robertbo 的回复:
return(p-a),返回的是地址差,结果为4,是正确的啊。 p和a都是指针,做减法运算的话是地址的减法。
不明白什么是地址的减法。。。。 可以详细说一下为什么结果是4吗?
robertbo 2014-11-18
  • 打赏
  • 举报
回复
return(p-a),返回的是地址差,结果为4,是正确的啊。 p和a都是指针,做减法运算的话是地址的减法。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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