概述
首先来看一个问题:
这个是我在帮人刷题时,遇到的一个错误,之前一直没注意,也是对指针的理解不深刻的原因吧,我把它简化了,也就不贴原题的代码。
我刚开始以为的会输出: hello C++
结果输出的却是: hello ediot
下一部分给出问题原因
#include <iostream>
using namespace std;
void changeInput(char* input){
input = "hello C++";
}
int main(){
char *input = "hello ediot";
changeInput(input);
cout << input << endl;
return 0;
}
输出结果:
下面来看看input的地址:
在inputChange执行前后,input指向的地址是不变的,因为执行inputChange函数,原意是想改变input指向的地址(即input的值),可是input此时是作为地址的值传递,相当于是复制,而非引用和指针传递,所以才出现了上述奇怪的结果。
#include <iostream>
using namespace std;
void changeInput(char* input){
input = "hello C++";
cout << "input address in changeInput:" << &input << endl;
}
int main(){
char *input = "hello ediot";
cout << "input address before changeInput:" << &input << endl;
changeInput(input);
cout << "input address after changeInput:" << &input << endl;
cout << input << endl;
return 0;
}
输出结果:
再来一个解决办法:
正确传的参数应该是input的地址~
#include <iostream>
using namespace std;
void changeInput(char** input){
char *change = "hello C++";
*input = change;
}
int main(){
char *input = "hello ediot";
changeInput(&input);
cout << input << endl;
return 0;
}
最后
以上就是忧郁乐曲为你收集整理的C/C++——C风格的字符串的指针指向的内存位置问题(易错)的全部内容,希望文章能够帮你解决C/C++——C风格的字符串的指针指向的内存位置问题(易错)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复