const char* 是字符串还是指针?为何可被重新赋值?
搞懂
const char*的真正含义 嘿,这是个超级常见的误区!你对const char*的理解跑偏了一点点——咱们来掰扯清楚:
首先,const char*的意思是:指针本身是可以改变指向的,但它指向的字符内容是不可修改的。const修饰的是char(也就是指针指向的目标),不是指针变量本身。
看你写的代码:
#include <iostream> using namespace std; const char *name1 = "Alex"; int main() { name1 = "John"; cout << name1 << endl; }
你这里的name1 = "John";根本没修改字符串的内容!你只是把name1这个指针变量,从原本指向字符串常量"Alex"的首地址,改成了指向另一个字符串常量"John"的首地址而已——这完全在const char*的允许范围内。
要是你尝试修改指针指向的内容,比如写:
name1[0] = 'B'; // 试图把第一个字符改成'B'
这时候编译器肯定会报错,因为你在修改const char类型的内容,违反了const的约束。
为了彻底搞明白,再给你梳理下几种const指针的区别:
const char* ptr:指针可变(能换指向),指向的内容不可变char* const ptr:指针不可变(不能换指向),指向的内容可变const char* const ptr:指针和指向的内容都不可变
这下你应该明白为啥你的代码能正常运行了吧?你只是换了指针的指向,没碰字符串本身的内容~
内容的提问来源于stack exchange,提问作者W.Joe
相关产品推荐
相关产品推荐

