C语言关键字之const
程序员文章站
2022-07-09 21:46:55
...
目录
前言
初学C语言时,对于const关键字的理解仅仅停留在“不可改变”这一层意思上。本文总结一下const关键字在各种情况下的使用方法,及其功能。后续如果遇到新的使用情况会随时更新。
1.const功能
const修饰的变量,该变量没有写权限,只有读权限。所以也可称被const修饰的变量为常量。后续各种用法本质都遵循这句话。
2.const实例
2.1 const修饰一个变量
①变量被const修饰时,必须在定义时进行赋值,因为被const修饰的变量没有写权限,如果不在定义时赋值,编译会报警告。如果试图对该变量赋值,编译会报错。
②const在修饰变量变量时,位置不做要求。
void function(void)
{
int a;
const int test_1; //没有赋值,编译会报警告!
const int test_2 = 10; //正确赋值
int const test_3 = 11; //const位置变化无影响
test_1 = 9; //试图赋值,编译报错!
a = test_2; //可以读,合法
}
2.2 const修饰指针变量
const在修饰指针变量时,容易混淆。
int a = 100;
int b = 200;
/*1.const修饰*test_1,将test_1作为左值合法,将*test_1作为左值非法*/
const int *test_1=&a;
test_1 = &b; //使用test_1做左值,合法
printf("%d",*test_1); //输出结果为:200
*test_1 = 200; //使用*test_1做左值,非法
/*2.const修饰test_2,将test_2作为左值非法,将*test_2作为左值合法*/
int * const p2=&a;
*test_2=300; //使用*test_2做左值,合法
printf("%d",*test_2); //输出结果为:300
test_2=&b; //使用test_2做左值,非法
/*3.const分别修饰*test_3,test_3,将*test_3,test_3作为左值都非法*/
const int * const test_3=&a;
test_3 = &b; //使用test_3做左值,非法
*test_3 = 100; //使用*test_3做左值,非法
只要记住const只锁定跟他相邻的变量即可。即:
当const放在 * 之前,修饰的是*test,此时如果对*test赋值就不合法,但是对test赋值合法。
当const放在*之后,修饰的就是test,此时如果对test赋值就不合法,但是对*test赋值合法。
当const放在*之前和之后,那么对*test和test赋值都不合法。
2.3 函数形参被const修饰
函数形参被const修饰,则在函数中,不能对此形参进行写操作,只能读。