C语言const用法

本文介绍了C语言中const修饰符的用法,包括const常量的优势,如提供语法检查和初始化时求值。同时讨论了const修饰的变量并非真正常量,可以间接通过指针修改。还讲解了const修饰指针变量的两种情况,即指针指向的值不可变和指针自身不可变,并举例说明如何在实际项目中选择使用。

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

1、const常量与符号常量

相比于通过#define定义的符号常量,使用const修饰符有两点优势:
1)const修饰符将变量转换为常量时,会做语法检查,如果存在越界或超限的情况,会给出警告,而#define宏定义只做简单替换;

如当我们需要定义一个short(2字节)常量时,使用:

#define AI 65535
const short AI = 65535;

下边表达式,编译器会给出越界警告,而上边表达式语法无误,自然不会有所提示。

2)const修饰的常量进行初始化时,会对赋值符右边的表达式进行求解,而#define宏定义只做简单替换,不会求解表达式。

#define SUM 5 + 5
const int SUM = 5 + 5;

同样执行 3 * SUM,上边输出20,下边输出30。
当然若这样说明#define SUM (5 + 5),则都输出30。这里仅在语法方面给出不同,至于怎么灵活运用,就看需求。

2、const修饰的变量并不是常量

1)const修饰变量

const int a = 10;
a = 20;

这时编译器会报错。

const int a = 10;
int *adder_a = &a;
*adder_a = 20;

此时a 的值变为20;

const修饰的变量,其值不可以直接被改变,但可通过指针被改变。

2)const修饰指针变量

int a = 1;
const int* adder = &a;

通过 const 修饰 int*,为指向常量的指针,指针的指向可以改变,而所指向的值不可以改变。

int a = 1;
int* const adder = &a;

通过 const 修饰 adder,指针的指向不可以改变,而所指向的值可以改变。

int a = 1;
const int* const adder = &a;

其指向和指向的内容均不可变。

读者可根据项目需要进行选用。

int main()
{
    int a = 1;
    const int *adder_a = &a;
    //此时定义一个指向常量的指针

    //*adder_a = 2;
    int ** adder_adder_a = &adder_a;

    **adder_adder_a = 2;

    printf("%d",**adder_adder_a);
}

指向常量的指针亦可被指向指针的指针修改其指向的数据:
**adder_adder_a = 2;
输出为2;
而 //*adder_a = 2;
编译器会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值