const关键字在C中的几种用法
初学c的小伙伴可能在这个问题上纠结好久,const为什么会有这个关键字,为什么我们需要用
const修饰,而且我们c语言中有预编译处理,为什么要const。const相对于预编译处理有以下几点好处:
- 预编译处理只是简单的宏替换,并不能进行类型检查。
- 比如在修饰全局变量时,const可以防止被修饰的内容被修改,避免一些不必要的错误。
- const并没有被分配内存,使他的效率变高。
const有以下几种用法:
##修饰局部变量
当const修饰局部变量表示局部变量的值不可被改变
const int k=1;
int const k=1;
这两种写法相同,皆表示在接下来局部变量的作用域中被const修饰的k值不会被改变。
那么他有什么好处呢,当我们不小心修改了某个不应该修改的值时系统会在编译的时候查出来。并且要记住一定要给k初始化。
常量指针与指针常量
常量指针
常量指针故名思意是指这个指针所指向的是一个常量,他不可以通过这个指针进行修改。
定义方式为:
const int* k;
int const* k;
不过根据定义我们可以发现亮点:
- 不能通过指针改变不过我们可以根据其他方式改变
int k=1;
const int* str=&k;
k=2;
2.指针指向的值不可以改变不意味指针不可以改变,我们可以让指针指向其他值
int a=1;
int b=2;
const int* k=&a;
k=&b;
指针常量
指针常量是一个常量,这就意味着这个指针不可以被改变,只可以指向这一个地址。
定义方式为:
int* const n;
虽然指向的位置不可以改变,不过可以改变指向位置存的数值。
修饰函数参数
当const修饰函数参数时,与上述常量指针与指针常量相同,当为常量指针时,不可以修改指针指向的内容。当为指针常量时不可以修改这个指针所指向的地址。
修饰函数返回值
当修饰函数返回值的时候,表示该函数返回值的内容不可以被修改。
定义方式为:
const int*fun();
该函数只可以赋值给被const修饰的同类型指针。
修饰全局变量
在修饰全局变量时,由于全局变量修改有可能导致影响到其他函数,产生不必要的错误,所以用const修饰全局变量让他的作用域变成这个文件。