C++中char**与char*&的区别及指针引用代码执行原理问询
C++代码执行结果解析与指针相关概念区别
一、代码为什么会让c变成'b'?
先看这段代码:
char c='a'; char *pc=&c; char *&rc=pc ; (*rc)++;
逐行拆解逻辑:
char c='a';:创建字符变量c,初始值是ASCII码为97的字符'a'。char *pc=&c;:定义指针pc,让它指向c的内存地址,此时pc里存的是c的地址。char *&rc=pc;:这里rc是char*类型指针的引用,简单说就是pc的“别名”——rc和pc完全等价,指向同一个地址(也就是c的地址),操作rc就等于操作pc。(*rc)++;:*rc是对rc解引用,拿到它指向的变量(也就是c),然后执行自增操作。'a'的ASCII码加1变成98,对应字符'b',所以c的值就变成了'b'。
二、char**和char*&的核心区别
1. 本质差异
char**:是指向指针的指针,是一个独立的变量,它存储的是另一个char*类型指针的内存地址。比如你可以先定义char* p;,再定义char** pp = &p;,pp就是存放p地址的指针。char*&:是指针的引用,不是独立变量,而是已有char*指针的别名。比如char*& rp = p;,rp和p是同一个东西的不同名字,修改rp就等于直接修改p。
2. 使用场景不同
- 当需要在函数中修改指针本身的指向时:
- 用
char**的话,需要先解引用才能操作原指针,比如:void changePtr(char** pp) { *pp = new char('x'); // 解引用pp,修改原指针的指向 } - 用
char*&的话,直接操作引用就能修改原指针,更简洁:void changePtr(char*& rp) { rp = new char('x'); // 直接修改原指针的指向 }
- 用
3. 内存占用不同
char**作为独立变量,占用一个指针大小的内存(64位系统通常是8字节)。char*&只是原指针的别名,不占用额外内存空间,它的所有操作都会直接映射到原指针上。
内容的提问来源于stack exchange,提问作者salahuddin
相关产品推荐
相关产品推荐

