目录

一、const的简单介绍

二、const关键字的用法

1: const修饰全局变量

2:const修饰普通局部变量

3:const修饰指针变量的类型(即常量指针)

4:const修饰指针变量(即指针常量)

5:const既修饰指针变量类型又修饰指针(即常量指针常量)

三、总结


一、const的简单介绍

const含义:只要一个变量前用const来修饰,就意味着该变量里的数据只能被访问,而不能被修改,也就是意味着“只读”(readonly)。

const作用:
1:可以用来修饰变量,修饰函数参数,修饰函数返回值,且被const修饰的东西,都受到强制保护,可以预防其它代码无意识的进行修改,从而提高了程序的健壮性
2:使编译器保护那些不希望被修改的参数,防止无意代码的修改
3:增强代码的可读性

二、const关键字的用法

1:const修饰全局变量

此时全局变量只能使用不可修改,直接修改(编译报错)与修改地址(程序异常)都不行

#include //const修饰全局变量//此时全局变量只能使用不可修改,直接修改(编译报错)与修改地址(程序异常)也不行const int a = 100;void test1(){printf("a = %d\n", a);//直接使用//a = 666;//直接修改,编译报错,显示a是只读的//printf("a = %d\n", a);//int *p = &a;//*p = 888;//通过地址修改,程序异常,有些编译器可能只会显示警告,并不会报错,且程序能正常运行,但是不会显示任何结果//printf("a = %d\n", a);}int main(int argc, char *argv[]){test01();return 0;}

直接使用

这是直接修改a,编译报错

通过地址修改a的值出现的警告(有些编译器则不能通过编译,会直接报错)

运行结果(并未显示任何东西)

2:const修饰普通局部变量

不可直接修改变量的值(编译报错),但是可以通过地址进行修改

#include//const修饰普通局部变量//不可直接修改(编译报错),但是可以通过地址进行修改void test2(){const int b = 100;printf("b = %d\n", b);//b = 666;//直接修改,编译报错//printf("b = %d\n", b);int *p = &b;*p = 888;//通过地址进行修改printf("b = %d\n", b);}int main(int argc, char *argv[]){test2();}

直接修改(编译报错)

通过地址修改

3:const修饰指针变量的类型(即常量指针)

int a = 100;const int *p = &a;或int const *p = &a;
const修饰指针变量的类型,可直接修改变量值,不可修改指针指向的地址里的内容(编译报错),可以修改指针的指向
#includevoid test3(){int c = 100;const int *p = &c;printf("c = %d\n",c);c = 666;//可以直接修改变量的值printf("c = %d\n",c);//*p = 888;//不可修改指针指向的地址里的内容,编译报错//printf("c = %d\n",c);int d =999;p = &d;//可以修改指针的指向printf("*p = %d\n",*p);}int main(int argc, char *argv[]){test3();}

直接修改变量的值

通过指针修改地址里面的值(编译报错)

修改指针指向

4:const修饰指针变量(即指针常量)

int a = 5;int * const p = &a;

可以直接修改变量的值,可以修改指针指向地址的内容,但是不能修改指针的指向(编译报错)

#includevoid test4(){int c = 200;int* const p = &c;//const修饰指针,即指针常量printf("*p = %d\n",*p);c = 666;printf("c = %d\n",c);//直接修改值printf("*p = %d\n",*p);*p = 888;//修改指针指向地址里的内容printf("*p = %d\n",*p);int d =999;//p = &d;//不能修改指针的指向,编译报错//printf("*p = %d\n",*p);}int main(int argc, char *argv[]){test4();return 0 ;}

直接修改变量值

修改指针指向地址的内容

修改指针指向(编译报错)

5:const既修饰指针变量类型又修饰指针(即常量指针常量)

int a = 100;const int * const p = &a;

可直接修改变量值,不能修改指针指向地址的内容,不能修改指针指向

#includevoid test5(){int c = 200;const int * const p = &c;//即修饰指针变量类型又修饰指针变量printf("*p = %d\n",*p);c = 666;//可以直接修改值printf("c = %d\n",c);printf("*p = %d\n",*p);//*p = 888;//不能修改指针指向地址里的内容,编译报错//printf("*p = %d\n",*p);//int d =999;//p = &d;//不能修改指针指向,编译报错//printf("*p = %d\n",*p);}int main(int argc, char *argv[]){test5();return 0;}

直接修改变量值:

修改指针指向地址的内容:

修改指针指向:

三、总结

对于const关键字的使用,我这里只介绍了修饰全局变量、修饰局部变量以及修饰指针的用法,因为这些用法较多,而修饰函数则需大家再做研究。同时一般在初学阶段基本很少使用const关键字,大家在进入工作或是一些较复杂的项目中才会经常使用,所以大家可以在初学阶段尝试使用,养成良好习惯。