C语言中指针作为参数时,出现的问题?
我先定义了一个的函数:
void pop(char *p)
{
*p='\0';
--p;
}
之后在main()函数中调用:
pop(zp);//zp是一已定义的字符指针
再把以上语句换成
*zp='\0';
--zp;
结果竟然不一样!
求解释!
[解决办法]
void pop(char *p) // 传进去的是p的副本,函数体内的p全部都是参数p的副本,一旦离开函数体,p还是原来的值{ *p='\0'; // 这个操作有效 --p; // 这个就有问题了,此处是p的副本在--,而不是p本身}
[解决办法]
作为一个对指针曾经迷惘过的C语言学习者,我推荐楼主看下我写的这个。我的C语言初学者的建议篇:
http://topic.csdn.net/u/20120319/15/0751ad00-bad3-481b-9f3a-fed7409cb9cc.html
[解决办法]
在C语言中,所有的参数传递都是传值,也就是说传入函数体内部的都是副本。比如上面楼主写的传入一个字符指针p,其实指针就是一个unsigned int,就像这样:
void pop(int x){ // ... --x;}// ==============================unsigned int x = 12345678;// 如果调用pop(x);// 在pop函数内部(见上面)的x,只是参数x的副本,其中所有的操作皆针对副本,参数x本身不会有任何变化