C语言第5讲 const和volatile分析

下面我们开始今天的内容:大家都知道在c语言里面const是用来定义一个常量的,我想告诉大家的是const并没有真真正正定义一个常量,它定义的只是一个只读的变量,也就是说const他所修饰的变量他会占内存空间,const的作用是告诉编译器这个变量是只读的,换句话说这个变量是只读的,(既然只是对编译器有用,那么也就是说在运行时是无用的),换句话说我们在程序运行起来的时候还是可以通过指针来改变一个变量的值的。那么接下来我们就通过小程序来向大家验证这个问题

当我们写完程序编译后会有以下提示: 你想要给一个只读的变量赋值,

那么我们有什么办法对一个只读的变量赋值呢?

刚才说了通过指针,我们通过定义一个指针并将上面的const只读变量赋值给指针,并通过指针改变他的值,编译通过后执行,打印出来的结果是  1   

                          3

这时,是不是和变量已经没啥区别了,这就是刚才所说的我们的const它并不是真的常量,他只是告诉编译器这是一个只读的变量,在程序当中,不能够直接将他作为左值,也就是说不能够直接给一个const修饰的变量赋值,但是这个变量还是在内存里面占据一定空间的,也就是说我们还是可以通过取地址操作符来得到他的地址,那么只要知道他的地址我们就可以改变他这块内存里面的值了,这就是C语言里面const常量的本质,当然现在的C编译器的话对const常量的话做了一些优化,刚才说的是标准C里面对const常量的处理。那么,我们来看一下现在的C或者C++编译器是怎么来处理const常量的呢?现在的c编译器会直接去const变量的地址里取值,取了值再赋值给左值。

接下来看const修饰的数组,大致与const修饰的变量一致,但是const修饰的数组空间不可以被改变(但这不是绝对的,只是针对现在的C编译器而言),如果你要改变的话程序就会死掉,但是在标准C里面这个数组还是分配了空间的,const只是想说明我们定义的数组它是只读的不能够出现在赋值符号的左边,当然你通过指针还是可以改变数组里的值。只不过说现在的C编译器当你要这样去赋值的时候你的程序就会死掉,

注意:const修饰的数组元素是不可以被改变的。

扫描二维码关注公众号,回复: 3029218 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_38787597/article/details/82193656