目錄
前言
初學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賦值都不合法。