C语言之旅(4)const

在C语言中,const声明的变量是只读变量,并不等同于常量。

const和define的区别是什么?

1.对于define宏,在C语言中是单纯的替换。在预编译阶段就是完成全量替换操作,并不检查对错。

2.而const,程序在编译的时候会检查const的类型,如果不对的话,编译会报错。

3.const可以保护被修饰的东西,防止被意外或者恶意修改。例如函数中的传参数,如果用const修饰的话,在函数内部是不允许修改这个参数的数值的。

const int a;和int const a;效果是一样的,都是不允许在程序后续的执行过程中对变量a 的内容就行修改。所以说这个时候修饰的变量a应该尽量初始化,因为之后是不允许修改的。

int const *p;和int *const p;以及int const * const p;的区别?

1.const在*号的左边说明指针p存储的地址对应的内存空间里面的数值不能改变;

2.const在*号右边的话,说明p指针只能存储刚开始初始化的时候存储的地址,不能再次进行改变。

3.const在*的两侧都有的话就是上面两种情况同事发生。

例如:

int a=3;

int b=4;

int const *p1=&a;

这个时候p1存储的是变量a的地址,但是const是在*号左边的,(可以理解为,const修饰了p1的引用,即*p)那么*p1=4;(X)不对的。但是p1=&b;(正确)

int * const p2=&a;

这个时候p2存储的是变量a的地址,但是const实在*号右边的,(可以理解为,const修饰了指针变量p1)那么*p1=4;(正确)不对的。但是p1=&b;(不对)。这个时候p2只能存储初始化的时候赋值的a的地址。之后将不能改变。

int const a=6;

int arr[a];这个在C语言中是不正确的,因为ANSI C中规定,数组中括号中的必须是常量,而在C语言中const a;中的a是只读变量,并不是常量,所以是不对的,但是在C++中确实正确的。

是不是const定义的变量就真的不能改变了?

答案是否定的,例如:int const a =9;

尽管变量a的数值不能直接改变,但是我们可以定义一个指针存储a的地址,然后通过地址进行改变。

int *p=&a;

*p = 12;

这样a的数值就变成了12.

但是在C++中是不成立的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值