c语言关键字const

基本概念

const -> 设置变量为只读类型(常变量)

const可作用于以下类型:

第一类 一般类型

int char short double float long 等

T 为类型

此时T const 变量名和 const T 变量名相同

在初始化const T 时, 既可以用 const T 来作为右值 ,也可以用 T 作为右值

如果没有初始化,后续无法赋值,因此有些编译器会因为const 变量未初始化而报错

第二类 指针

分为一级指针和多级指针

一级指针

声明
1.T const * p; 
//指向常量的指针 , 即指针的值可以变,指向的值不能通过指针改变;

2.const T *p; 
//和1相同

3.T * const p; 
//指向变量的指针常量 , 即指针的值不能变,指向的值可以通过指针改变;
//未初始化时编译器可能报错;

4.const * T p; 
//无效声明

5.const T * const p; 
//指向常量的指针常量,即指针的值和指向的值都不能改变
赋值

指向常量的指针 T const *p 可以直接 "被" T* 所赋值(隐式转换)

而 一般指针 T* p "被" 指向常量的指针T const* p 直接赋值时会报错(可以显式转换,但是不建议)

多级指针(常用的二级指针)

声明
1.const int ** p 
//指向常量的二级指针 即**p不能改

2.int ** const p 
//指向变量的二级指针常量 即p不能改

3.int * const * p 
//指向指针常量的二级指针常量 即*p不能改
赋值
//注意

int * p;

const int ** p2 = &p; 
//报错,T ** 到 const T **的转换

//而

const int *p;

const int ** p2 =& p; 
//正确
//在c语言中T* 可以赋值给 const T* 而T ** 不能赋值给 const T ** 

第三类 数组(通过typedef)

typedef int A[1][2]; 
const A a = {{1,2}}; // const int* 的数组 是是是是是是是是是是
int* pi = a[0]; // 错误: a[0] 拥有 const int* 类型

//实际上就是指针 const int* 不能赋值给int*

第四类 结构体

分两种:

const 修饰结构体

整个结构体里的变量都被限制为只读

const修饰结构体的变量

该结构体的其他变量不受影响,但是结构体被限制为只读

如有错误,欢迎指正

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值