更新時間:2022年06月13日16時47分 來源:傳智教育 瀏覽次數(shù):
有時在定義函數(shù)時,在函數(shù)內(nèi)部,只想讓參數(shù)參與某種運算,不想改變參數(shù)的值,這時可以使用const關(guān)鍵字修飾形式參數(shù)。例如,定義一個函數(shù):void even(int num),用于判斷傳入的整數(shù)是否是偶數(shù),但在函數(shù)內(nèi)部并不想?yún)?shù)num發(fā)生任何改變,這時可以使用const關(guān)鍵字修飾num。下面通過一個案例演示const修飾參數(shù)的使用,具體如例1所示。
例1 const.c
#define _CRT_SECURE_NO_WARNINGS //關(guān)閉安全檢查 #include <stdio.h> void even(const int num ) //使用const修飾num { if (num % 2 == 0) printf("%d是偶數(shù)!",num); else printf("%d是奇數(shù)!",num); } int main() { int n; printf("請輸入一個整數(shù):"); scanf("%d", &n); even(n); return 0; }
例1運行結(jié)果如圖1所示。
圖1 例1運行結(jié)果
在在例1中,第3~9行代碼定義了even()函數(shù),用于判斷傳入的數(shù)據(jù)是奇數(shù)還是偶數(shù);第12~14行代碼定義整型變量n,并調(diào)用scanf()函數(shù)從鍵盤讀取數(shù)據(jù)賦值給變量n;第15行代碼調(diào)用even()函數(shù),將n作為參數(shù)傳入函數(shù)。由圖1可知,當(dāng)輸入11時,even()函數(shù)判斷11是奇數(shù)。
在even()函數(shù)中,參數(shù)num被const關(guān)鍵字修飾,則num在even()函數(shù)內(nèi)部不能被更改,否則編譯器會報錯。如果在even()函數(shù)中修改num的值,示例代碼如下:
void func(const int num ) //使用const修飾num { num += 10; //修改num的值 if (num % 2 == 0) printf("%d是偶數(shù)!",num); else printf("%d是奇數(shù)!",num); }
再次在main()函數(shù)中調(diào)用even()函數(shù),編譯器會報錯,如圖2所示。
圖2 編譯器報錯
由圖2可知,num被const關(guān)鍵字修飾,是不可更改的。但是const修飾的變量,雖然無法通過變量本身修改其值,卻可以通過指針進(jìn)行修改,定義一個指向num的指針,通過指針可以修改num的值,示例代碼如下:
int* p = # //定義指向num的指針 *p += 10; //通過指針改變num的值