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

C语言中const修饰普通变量与指针的用法有什么区别

const修饰普通变量与指针的用法差异

两者的约束对象完全不同,具体区别如下:

1. const修饰普通变量

  • 作用是将变量标记为只读,必须在声明时完成初始化,后续不允许修改变量的值
  • 你给出的示例const int var;本身存在语法问题,未初始化的const普通变量会直接触发编译错误,正确写法为const int var = 10;
  • 后续如果尝试修改该变量,比如执行var = 20;,编译器会直接报错

2. const修饰指针

const修饰指针时,约束对象由const和*的相对位置决定,核心判断规则为:const位于*左侧时约束指向内容,位于*右侧时约束指针本身。
你给出的示例const int *ptr;属于第一种场景,三种常见的const指针用法如下:

  • const int *ptr(等价于int const *ptr)
    仅限制指针指向的内容,不允许通过该指针修改指向的内存值,但指针本身的指向可以修改,示例:
    int num1 = 10, num2 = 20;
    const int *p = &num1;
    // *p = 30; 编译报错:不能通过p修改指向的内容
    p = &num2; // 合法:修改p的指向为num2的地址
    
  • int *const ptr
    仅限制指针本身的指向,声明时必须初始化,后续不能修改指针的指向,但可以通过指针修改指向的内容,示例:
    int num1 = 10, num2 = 20;
    int *const p = &num1;
    *p = 30; // 合法:修改num1的值为30
    // p = &num2; 编译报错:不能修改p的指向
    
  • const int *const ptr
    同时约束指针的指向和指向的内容,两者都不允许修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:09:04