const的老生常谈

文章详细解释了C语言中const关键字在指针声明中的四种情况:指针本身可变但指向常量,指针和指向的值都不可变,以及两种类型的const修饰。强调了这些用法对类型安全性的提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C语言中,`const`关键字用来限定一个变量为常量,这意味着该变量的值不能被修改。但`const`可以用于限定不同级别的常量性,这取决于它出现的位置。我将解释`const`出现在指针声明中不同位置时的含义:

1. **类型修饰符 `const` 在指针星号 `*` 之前**:
   

const int *ptr;


   这声明了一个指向整数的指针`ptr`,这个整数是不可修改的,但`ptr`本身是可以修改的。这意味着你可以改变`ptr`指向哪个整数,但不能通过`ptr`来改变这个整数的值。

   举例:
  

int a = 5, b = 10;
const int *ptr = &a;  // ptr 指向 a
ptr = &b;             // OK: ptr 现在指向 b
//*ptr = 15;           // Error: 不能通过 ptr 修改 b 的值

2. **类型修饰符 `const` 在指针星号 `*` 之后**:
   ```c
   int const *ptr;
   ```
   这与第1种情况完全相同,`ptr`是一个指针,它指向一个不可修改的整数。你可以改变`ptr`指向哪个整数,但不能通过`ptr`来改变这个整数的值。这只是语法上的另一种写法。

3. **类型修饰符 `const` 在类型和指针星号 `*` 之间**:
 

int const *ptr;


   这声明了一个指针`ptr`,这个指针是不可修改的,但它所指向的整数是可以修改的。这意味着你不能改变`ptr`指向哪个整数,但可以通过`ptr`来改变这个整数的值。

   举例:
 

int a = 5, b = 10;
const int *ptr = &a;  // ptr 指向 a
ptr = &b;             // OK: ptr 现在指向 b
//*ptr = 15;           // Error: 不能通过 ptr 修改 b 的值

4. **类型修饰符 `const` 出现两次,一次在类型前,一次在指针星号 `*` 之后**:
 

const int *const ptr;


   这声明了一个指针`ptr`,这个指针和它所指向的整数都是不可修改的。这意味着你既不能改变`ptr`指向哪个整数,也不能通过`ptr`来改变这个整数的值。

   举例:
 

int a = 5;
const int *const ptr = &a;  // ptr 指向 a
//ptr = &b;                  // Error: 不能改变 ptr 的指向
//*ptr = 15;                 // Error: 不能通过 ptr 修改 a 的值

这些规则可以帮助你更精确地控制指针和它所指向的数据的可修改性,从而提供更强的类型安全性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值