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;}
阅读全文
0 0
- C/C++——C风格的字符串的指针指向的内存位置问题(易错)
- 你好,C++(15)四两拨千斤——3.9 指向内存位置的指针
- 你好,C++(15)四两拨千斤——3.9 指向内存位置的指针
- C语言字符串指针(指向字符串的指针)
- 94 C语言字符串指针(指向字符串的指针)
- C语言字符串指针(指向字符串的指针)
- c 指向指针的指针
- C 指向指针的指针
- C/C++——指向函数的指针和指向函数的指针的数组
- 彻底搞定C指针——指向指针的指针
- 再谈C语言指针—指向另一指针的指针
- 再谈C语言指针—指向另一指针的指针
- C风格的字符串
- c风格的字符串
- C风格的字符串
- c风格的字符串
- c 指向函数的指针
- 指向对象的指针【c++】
- C++对象模型中数据成员与继承
- JS一键复制 兼容PC(包括图片)+移动端
- Linux Ubuntu apt-get安装mysql
- 收集 Atom 资料
- 数据结构 链表 单链表的建立 C语言版
- C/C++——C风格的字符串的指针指向的内存位置问题(易错)
- 字符串查找
- Studying is simple?
- c++ string 函数的重载
- 朋友 HDU
- 最大连续子序列和
- [容易] bfs状态搜索
- 《python》---random函数
- java 中StringBuffer中常用的方法