我是靠谱客的博主 忧郁乐曲,最近开发中收集的这篇文章主要介绍C/C++——C风格的字符串的指针指向的内存位置问题(易错),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先来看一个问题:

这个是我在帮人刷题时,遇到的一个错误,之前一直没注意,也是对指针的理解不深刻的原因吧,我把它简化了,也就不贴原题的代码。
我刚开始以为的会输出: 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风格的字符串的指针指向的内存位置问题(易错)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部