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

C语言中双重const关键字的语法含义与正确使用方法咨询

C语言const修饰指针的核心规则

C语言中const和指针结合时的含义可以通过***的相对位置**快速判断:

  • 出现在*左侧的const:限定指针指向的内容不可修改,无法通过该指针修改目标变量的值
  • 出现在*右侧的const:限定**指针本身的值(存储的内存地址)**不可修改,无法让该指针指向其他内存地址
  • 同一侧重复书写的const属于冗余语法,编译器会自动忽略重复的const修饰

测试代码说明

第一个测试用例

char const * const ptr = &a;

这里const同时出现在*的左右两侧,因此指向的内容和指针本身都不可修改,尝试写ptr = &b修改指针指向,自然会触发编译报错,和你观察到的现象一致。

第二个测试用例

char const const *ptr = &a;

两个const都出现在*的左侧,重复的const会被编译器忽略,等价于char const *ptr = &a,只有指向的内容不可修改,指针本身的指向可以改动。因此ptr = &b是合法操作,修改后ptr指向变量b,输出*ptr得到B,而原变量a没有被改动,输出还是A,完全符合语法规则。


原代码片段的含义

你看到的定义:

static char const *const delimit_method_string[] =
{
    "none", "prepend", "separate", NULL
};

是一个静态只读字符串数组,拆解含义如下:

  1. static:限定该数组的作用域仅在当前源文件内,其他源文件无法直接引用
  2. *左侧的const:数组的每个元素是指向const char类型的指针,即指向的字符串字面量内容不可修改,不能通过delimit_method_string[1][0] = 'P'这类语句修改字符串内容
  3. *右侧的const:数组里存储的每个指针本身的值不可修改,不能通过delimit_method_string[0] = "other"这类语句修改数组元素的指向
  4. 整体就是一个不可修改元素指向、也不可修改内容的静态字符串表,通常用来存储固定的枚举值对应的字符串映射,是C语言中非常常见的常量字符串表写法。

内容的提问来源于stack exchange,提问作者ABHIJITH EA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:15:06