You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:55:54