读书人

一道C++题帮忙给看一下!该如何解

发布时间: 2012-03-09 21:42:55 作者: rapoo

一道C++题,帮忙给看一下!
#include <iostream.h>
#include <string.h>
point(char *p) {p+=3;}
main()
{
char b[4]={ 'a ', 'b ', 'c ', 'd '},*p=b;
point(p);
cout < <*p;
}

结果:a.

通过函数point()不是改变了p吗?为什么结果不是d呢?

帮忙解析一下吧?

谢谢!


[解决办法]
结果是不可改变的,结论就很清楚了:你分析错了。函数point()没有改变main函数里面的p。
[解决办法]
调用point(p)的时候会在栈区复制一个指针(假设为p1)并p1=p;跳出该函数时会销毁p1,现在你知道为什么不能改变p了
[解决办法]
同意楼上。point函数的参数是采用传值方式,不是采用传址。point(p)改变的只是p的一个拷贝,函数返回后这个拷贝销毁,不会影响到p本身。要修改p这个指针,参数可以采用指向指针的指针,或者指针的引用。

[解决办法]
同意。。。
[解决办法]
void point(char **pchar)
{
*pchar+=3;
}

main()
{
char b[]={ 'a ', 'b ', 'c ', 'd ', '\0 '};
char *p=b;
point(&p);
cout < < *p < < endl;
return 0;
}

读书人网 >C++

热点推荐