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

C语言中指针类型参数声明时const的用法及语法疑问

C语言指针const修饰的那些事儿

1. 声明void f(int * const p)是否合法?

当然合法啦!这种写法完全符合C语言的语法规则,它是对指针本身做只读限制的一种写法,咱们后面详细说它的作用~

2. 四种声明的核心区别

要搞懂这些区别,关键看const在*的左边还是右边:const在*左边是限制指针指向的内容不能改;在*右边是限制指针本身的指向不能改。咱们一个个拆解:

- void f(const int *p) 和 void f(int const *p)

这俩其实是完全等价的,只是写法不同而已!

它们的核心是:const修饰的是int,也就是p指向的那个整数内容,你不能通过p去修改它的值。但指针p本身是可以变的——你可以让p指向另一个整数变量。举个例子:

int a = 10, b = 20;
const int *p = &a;
// *p = 30; ❌ 这行是非法的,不能通过p修改指向的内容
p = &b;      ✅ 这行是合法的,p可以改指向

- void f(int * const p)

这里const在*的右边,修饰的是指针p本身。意思是:指针p的指向不能变(你不能让它指向别的变量),但它指向的那个整数内容是可以修改的。例子:

int a = 10, b = 20;
int * const p = &a;
*p = 30;      ✅ 合法,可以修改指向的内容
// p = &b; ❌ 非法,p的指向不能改

- void f(const int * const p)

这是双重限制:const既在*左边又在右边,所以指针指向的内容不能改,同时指针本身的指向也不能改。相当于把上面两种限制结合起来了。例子:

int a = 10, b = 20;
const int * const p = &a;
// *p = 30; ❌ 非法,不能改内容
// p = &b; ❌ 非法,不能改指向

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:18:58