《关于c语言地址问题的在讨论》由会员分享,可在线阅读,更多相关《关于c语言地址问题的在讨论(3页珍藏版)》请在金锄头文库上搜索。
1、先看一个例子: #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 是一个指针变
2、量其存放的值肯定为某个变量的地址即从主函数中传递过去的地址值 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 加三;由此得出结论,要想使传址改变主函数中的值,必须使得被调用的函数与主函数中的参数共享一段内存单元。