const修饰函数:const修饰常量



const可以用来定义常量也可以用来修饰参数和返回值这里只对const修饰常量做些探讨
说const就不能不说const和区别是很明显其中最大区别在于const可以做类型检查显然编译器是不可能做类型检查它根本就没有任何类型信息
在c语言中在编译时就确定了其值但是const变量却不是所以像这样定义是可以:const buf;
但是c中不行c中必须在定义时其值是在编译时是嵌入到代码中同样道理如下代码在c中编译是通不过但是在c中可以
const buf = 100;
.gif' />[buf];
如果在c中非要只定义个const而不化它那就必须用到extern关键字像这样定义
extern const buf;
现在有关const和在c和c区别应该都清楚了下面就专门讨论const在定义变量(或者说常量)时些要注意地方
1:const定义变量在编译时就已经确定并嵌入了具体值所以像下面那样在运行过程中想改变其值是不可能(c和c中都尽管在c中实际上并没有在编译时嵌入其值)
const value = 5;
value = 7; //
个指针要指向个const类型时其指针也必须是const引用和指针相同如下
*poer = &value; //
const *poer = &value; //正确
&ref = value; //
const &ref = value; //正确
以上指针和引用特点是:想要改变其指向地址或者是改变其指向地址内容都是不可能也就是说任何把它们放在“=”号左边做法都是(所以很多人都称他们为指向constconst指针记为const *const ptr)
value2 = 2;
*poer = 2; //
poer = &value2; //
ref = 2; //
&ref = value2; //
另外const *const ptr还有下面种定义思路方法
val =2;
const *const ptr = &val;
同样prt和*ptr都是不能改变当然还是可以通过val来改变这是和上面不地方val并不是const
val = 3; //正确
2:const用在指针和引用上还可以这样定义: *const ptr;这样定义意思是指针ptr所指向地址是不能改变但是地址内容并不是const类型是可以改变如下面那样
value = 2;
*const poer = &value;
*poer = 3; //正确
value2 = 3;
poer = &value2; //
引用本身就是指向个常量地址(固定地址)因此: & ref 和 *const ref具有相同行为如下所示
&ref = value;
ref = 3; //正确
&ref = &value // 实际上任何把&ref放在“=”号左边做法都
它所引用地址不能被改变
3:还有类const *ptr; 指向const内容指针你可以改变ptr所指向地址但是你不能改变ptr所指向内容
value = 1;
value2 = 2;
const *poer = &value;
*poer = 3; //
poer = &value2; //正确
*poer = 4; //就算改变了poer指向地址任然不能用
*poer来改变其内容当然用value2 = 4是
可以如下:
value2 = 4 //正确
引用并没有单独指向内容引用引用都是默认为引用个固定地址不能改变
整理总结:
1: *const ptr;指向const地址指针指向地址(ptr)不能变地址内容(*ptr)可以变
2:const *ptr; 指向const内容指针指向地址(ptr)可以变地址内容(*ptr)不能变
3:const *const ptr;所谓指向constconst指针都不能变
Tags:  aspconst constchar const const修饰函数

延伸阅读

最新评论

发表评论