C语言之旅(4)const
来源:互联网 发布:软件登记在哪里办理 编辑:程序博客网 时间:2024/06/05 20:36
在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++中是不成立的。
- C语言之旅(4)const
- C语言之const
- C语言之const
- C语言修饰词之const
- C语言总结之const
- C语言关键字之const
- c语言之const理解
- C语言之关键字const
- c语言基础之const
- C语言之关键字const
- C语言感悟之const
- C语言之const常量(摘自C和指针)
- 杂记之C语言之关键字const
- C语言之关键字(二) void,const
- c语言学习笔记之const关键字(理解)
- C语言(关键字const)
- 水滴石穿C语言之正确使用const
- C语言之正确使用const
- Android系统文件目录路径说明
- 【强化学习实践一】格子世界(DP)
- Linux:shell 命令解析器
- 社会我张哥,人狠话不多。
- c语言中static 函数和普通函数的区别?
- C语言之旅(4)const
- Word打印目录或另存为PDF时出现“错误!未定义书签!”的解决办法
- Netflix 微服务架构设计的经验总结!
- python3.5爬虫实例:根据城市名称来获取该城市最近七天的天气预报
- python的异常
- xslt导入excel
- Linux安装Tomcat
- 对拍bat代码及实现
- Bootstrap学习手册