C语言关键字之const

目录

前言

1.const功能

2.const实例

2.1 const修饰一个变量

2.2 const修饰指针变量


前言

初学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赋值都不合法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章