C/C++——C风格的字符串的指针指向的内存位置问题(易错)

来源:互联网 发布:wiley数据库 编辑:程序博客网 时间:2024/06/06 03:07

首先来看一个问题:

这个是我在帮人刷题时,遇到的一个错误,之前一直没注意,也是对指针的理解不深刻的原因吧,我把它简化了,也就不贴原题的代码。
我刚开始以为的会输出: 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;}

这里写图片描述

原创粉丝点击