C語言 關鍵字const的作用 const int* 和int *const 的區別
關鍵詞解釋
const是一個C語言(ANSI C)的關鍵字,具有著舉足輕重的地位。它限定一個變數不允許被改變,產生靜態作用。使用const在一定程度上可以提高程式的安全性和可靠性。另外,在觀看別人程式碼的時候,清晰理解const所起的作用,對理解對方的程式也有一定幫助。
定義
const修飾的資料型別是指常型別,常型別的變數或物件的值是不能被更新的。
主要作用
1、可以定義const常量,具有不可變性
2、便於進行型別檢查,使編譯器對處理內容有更多瞭解,消除了一些隱患。例如: void f(const int i) { …} 編譯器就會知道i是一個常量,不允許修改;
3、可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。
4、節省時間和提高效率,編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。
如何使用const和理解const int* 和int *const 的區別
以一個簡單的程式碼例子來解釋
#include <stdio.h>
void test1()
{
int n = 10;
int m = 20;
int *p = &n;
*p = 20;
p = &m;
}
void test2()
{
int n = 10;
int m = 20;
const int* p = &n;
*p = 20;
p = &m;
}
void test3()
{
int n = 10;
int m = 20;
int *const p = &n;
*p = 20;
p = &m;
}
int main()
{
//測試無cosnt的
test1();
//測試const放在*的左邊
test2();
//測試const放在*的右邊
test3();
return 0;
}
解釋程式碼:3個test的功能作用都是一樣的,定義兩個整形變數n和m,他們的值都分別為10和20。定義一個整形指標p,並且p指向的是n的地址,再通過指標p來改變n的值,使n的值變為20,再使指標p指向m的地址。
區別:test1()函式可以正常執行,而test2 ( )和test3()不可以。
test2()中的const int* p = &n;的const的作用是使指標不能改變指向當前地址的值,也就是說,此時n等於10,不能通過指標p來改變n的值。*p=20;此時這句話會報錯。
test3()中的int *const p = &n;的const的作用是使指標不能改變當前所指向的地址。也就是說,此時p指向的是n的地址,而不能再改變去指向m的地址。p = &m; 這句話會報錯
總結和使用:
- const如果放在*的左邊,修飾的是指標指向的內容,保證指標指向的內容不能通過指標來改變。但是指標變數本身的內容可變。
- const如果放在*的右邊,修飾的是指標變數本身,保證了指標變數的內容不能修改,但是指標指向的內容,可以通過指標改變。
如果有覺得不好的地方或者需要改進的地方,可在下方評論區留言,謝謝!
相關文章
- C語言中容易混淆的const關鍵字C語言
- c/c++ const關鍵字C++
- C++中的 const 關鍵字C++
- const關鍵字
- let關鍵字和const關鍵字
- const char*, char const*, char*const 有何區別?
- const關鍵字在C與C++中修飾變數的區別C++變數
- var和let/const的區別
- const、define 和 static 的區別
- var、let和const的區別
- const與static的區別
- var、const、let 的區別
- C語言之int *f()、int(*f)()、int *a[]、int (*a)[] 區別小記C語言
- C++11 關鍵字 const 到底怎麼用?C++
- 關鍵字const是什麼含意?
- JavaScript 高階—— ES6新增語法 const(let const var區別)JavaScript
- const * and * const
- let與const區別
- var let const區別
- let const var 區別
- let,const,var區別
- iOS常用關鍵字static、const、extern、defineiOS
- 深入聊一下const關鍵字
- C++ 頂層const底層constC++
- PHP 定義常量 define 和 const的區別PHP
- 頂層const和底層const
- JavaScript中let、const、var 的區別JavaScript
- 物聯網學習教程—const關鍵字
- int[] 、 list<int> 、 list<int>[] 的區別
- C++ 中的 const 物件與 const 成員函式C++物件函式
- C/C++中的constC++
- 搞懂頂層const和底層const
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- ES6中let和var和const的區別
- C語言include關鍵字和引用.h .c的區別C語言
- c語言中const修飾符C語言
- JavaScript中的var、let 及 const 區別JavaScript
- var、let、const宣告變數的區別變數