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 int * ; int * constC++
- C語言中容易混淆的const關鍵字C語言
- c/c++ const關鍵字C++
- C語言中const和#define的區別C語言
- C++中的 const 關鍵字C++
- const關鍵字
- const char*, char const*, char*const的區別
- const關鍵字在C與C++中修飾變數的區別C++變數
- const char*, char const*, char*const 有何區別?
- C/C++中Static和Const的作用C++
- var、let和const的區別
- var和let/const的區別
- const、define 和 static 的區別
- const和readonly的區別
- iOS中的static const extern關鍵字iOS
- C語言之int *f()、int(*f)()、int *a[]、int (*a)[] 區別小記C語言
- var、const、let 的區別
- const與static的區別
- C++11 關鍵字 const 到底怎麼用?C++
- extern int a 和int a的區別
- JS中const、var 和let的區別JS
- C語言中的Const常量和優化C語言優化
- JavaScript 高階—— ES6新增語法 const(let const var區別)JavaScript
- const * and * const
- iOS常用關鍵字static、const、extern、defineiOS
- let const var 區別
- var let const區別
- let與const區別
- let,const,var區別
- (int)a、&a、(int)&a、(int&)a的區別
- PHP 定義常量 define 和 const的區別PHP
- int[] 、 list<int> 、 list<int>[] 的區別
- C++ 頂層const底層constC++
- 物聯網學習教程—const關鍵字
- es6新特性--let,const關鍵字
- 頂層const和底層const
- JavaScript中let、const、var 的區別JavaScript
- 指向const物件的指標 和 const指標物件指標