C语言——const关键字

1. const关键字的作用

  1. const创建只读变量;
  2. 对函数形参使用const以保护数据;
  3. const与指针;
  4. 非const指针转换为const指针。

1.1 const创建只读变量

记住一点:const创建的不是常量,而是只读变量,相当于给变量赋予了常量的属性。C语言一般只有(1)字符常量;(2)#define宏定义的常量;(3)enum枚举常量。

下面的代码验证了const定义的不是常量而是变量。

#define MAX_LEN1 10//#define定义的是常量

int main(void){
    const int MAX_LEN2=10;//const定义的是变量
    
    int arr1[MAX_LEN1];//arr1的定义可以完成
    int arr2[MAX_LEN2[;//C语言不允许使用变量定义数组长度
    return 0;
}

1.2 对函数形参使用const以保护数据

使用指针进行参数的传递时,使用const定义函数的形参可以避免形参在函数中被改变,也相当于提醒了其他开发人员,这个函数不会对传入数据进行修改,C语言的库函数中很多都使用了const定义函数形参,这是一种保护数据的方式,也是很好的代码习惯。

//此函数定义未使用const保护传入参数,在函数体内的错误操作可能导致传入数据产生意想不到的改变
int sum(int ar[], int n)
//使用const关键字修饰ar数组,可以告诉函数使用者,本函数不会修改传入数组的数据,起到保护数据的作用
int sum(const int ar[], int n)

1.3 const与指针

可以参考下面的定义和操作:

     int a=248, b=4;
     int const c=21;
     const int *d=&a; 
     int *conste=&b;
     int const *f=&a;
c=32;//被禁止,编译器提示“表达式必须是可以被修改的左值”,其实就是说c是常量,不能修改
d=&b;//可以执行,*d是const表示d所指向的内存空间不可以被修改,但是d本身可以被修改
*d=43;//被禁止,参考上一条注释
e=34;//这里有两个问题,首先e是const,不能修改,另外e是int*类型,不能赋int类型的值
e=&a;//e是const,不能修改
*e=12;//这个是可以的,因为e是const,但是e指向的变量可以被修改
f=&b;//这个是可以的,*f是const,表示f指向的变量不能被修改,但是f本身可以被修改

在创建const指针时还可以使用两次const,定义的指针其本身不能被修改,也不允许修改其指向的内存空间的值。

double rates[2]={88.99, 100.12};
const double* const pc=rates;
pc=&rates[2];//不允许,pc是const指针
*pc=92.99;//不允许,pc指向的值也是const

1.4 非const指针转换为const指针

C语言中非const类型的指针可以默认转为const类型的指针,不需要我们显式地操作。但是不建议将const指针转为非const指针,这可能导致异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值