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