【C language】C语言感悟之const
文章目錄
#1、簡(jiǎn)介
const :限定符,它把一個(gè)對(duì)象轉(zhuǎn)換成一個(gè)常量。const是一個(gè)C語(yǔ)言(ANSI C)的關(guān)鍵字,具有著舉足輕重的地位。它限定一個(gè)變量不允許被改變,產(chǎn)生靜態(tài)作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在觀看別人代碼的時(shí)候,清晰理解const所起的作用,對(duì)理解對(duì)方的程序也有一定幫助。
令人又愛(ài)又恨的const
#2、用法
##2.1 const用來(lái)修飾普通變量
有定義如下
以上兩種寫(xiě)法,效果是一樣的,含義都是:不能通過(guò)Val這個(gè)變量名,來(lái)修改該地址的值;C語(yǔ)言與其他高級(jí)語(yǔ)言的區(qū)別就是它是直接操作內(nèi)存的功能,即定義了Val,那么編譯器就會(huì)開(kāi)辟一個(gè)int型的內(nèi)存來(lái)存放5,Val此時(shí)便作為這塊內(nèi)存的地址別名;
由于Val的修飾關(guān)鍵字是const,此時(shí)如果我們用 Val=10;編譯器將報(bào)錯(cuò),那么有沒(méi)有其他方法可以修改這塊內(nèi)存的值呢?答案是 不一定:在VC++ 6.0中,是可以通過(guò)以下操作來(lái)修改Val的值,而在VS和DEVC++中卻會(huì)報(bào)錯(cuò),這不知道算不算VC6.0的BUG…
定義一個(gè)指針,使它指向Val這塊內(nèi)存
int *p = &Val; *p=10; printf("%d\n",Val);/* 此時(shí)Val的值由5變?yōu)?0 */##2.2 const常量指針與指針常量
一開(kāi)始看到這個(gè)我也是懵逼的,后來(lái)網(wǎng)上有個(gè)dalao說(shuō)這樣記:以 * 為劃分,const在 * 左邊的,即為常量指針;const在 * 右邊的,即為指針常量;
###2.2.1常量指針
const用來(lái)一個(gè)修飾變量指針,便成為一個(gè)常量指針,寫(xiě)法如下:
它的含義是:不能通過(guò)這個(gè)指針來(lái)修改這個(gè)變量的值,但是可以通過(guò)其他的方式來(lái)修改變量的值:
int Num = 0;const int* Val = &Num; //Val的值為0;Num = 10; //Val的值此時(shí)變?yōu)?0;常量指針指向的值不能改變,但是這并不是意味著指針本身不能改變,常量指針可以指向其他的地址。可以通過(guò)使該指針指向其他地址
int Num_0 = 1;int Num_1 = 2;const int* n = &Num_0; //*n的值為1;n = &Num_1; //*n的值為2;###2.2.2指針常量
const寫(xiě)在 * 的右邊,含義是:這個(gè)指針本身是個(gè)常量,指向的地址不能改變;但是它所指向的地址的值卻是可以改變的。
寫(xiě)法如下:
我們可以通過(guò)其他指向該地址的指針來(lái)改變地址的值
int a=0;int *p=&a;int *const c = &a;//c的值為0;*p=10; //c的值為10;##2.3 const用來(lái)修飾函數(shù)參數(shù)
const用來(lái)修飾函數(shù)中的傳入?yún)?shù)
#3、總結(jié)
1、常量指針含義是:不能通過(guò)這個(gè)指針修改變量的值,可以通過(guò)直接操作內(nèi)存的方式或者令指針指向其他地址的方式來(lái)修改變量的值。 (2.2.1)
2、指針常量的含義是:指針指向的地址不能改變,但是可以通過(guò)其他同樣指向該地址的指針來(lái)修改值。 (2.2.2)
3、個(gè)人愚見(jiàn):合理應(yīng)用常量指針和指針常量修飾函數(shù)的傳入?yún)?shù),可以避免函數(shù)體中對(duì)傳入?yún)?shù)的修改,適合用于一些重要數(shù)據(jù)的保存與發(fā)送的場(chǎng)合。
總結(jié)
以上是生活随笔為你收集整理的【C language】C语言感悟之const的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【C language】C语言二分法查找
- 下一篇: 【STM32】STM32f4学习之路--