资源预览内容
第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
亲,该文档总共3页全部预览完了,如果喜欢就下载吧!
资源描述
先看一个例子: #include void point(char *p) p+=3; void point2(char *p) *p+=3; void main() char s=a,b,c,d,e; point (s); printf(“调用 pont()结果为:%cn“,*s); point2(s); printf(“调用 pont2()结果为:%cn“,*s); 运行结果如下:首先是 ponit()函数,该函数的确是传址调用,但我们看执行的结果却令人大失所望,因为我们所期望的结果与我们的实际操作大相径庭,究其原因,就在于 point()函数的执行即 p+=3; 我们知道 p 是一个指针变量其存放的值肯定为某个变量的地址即从主函数中传递过去的地址值 s,于是我们可以用图以来说明这个过程。但是 point()函数明显挂羊头卖狗肉,它执行了P+=3;一个存放地址值的变量加三?是何道理?最致命的一是 p 与*p 肯定不在同一个内存单元中。图一;Voind point(char *p) P+=3;主函数 void main() Pontt(s) ;Point2(*s )Void point2(ch ar *p) *p+=3;)而在 void point2()中的操作是*p+=3;是将 p 所指的内存单元的值加三,即 s 加三;由此得出结论,要想使传址改变主函数中的值,必须使得被调用的函数与主函数中的参数共享一段内存单元。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号