C語言 關鍵字const的作用 const int* 和int *const 的區別

白襯衫i發表於2020-11-14

關鍵詞解釋

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; 這句話會報錯

總結和使用

  1. const如果放在*的左邊,修飾的是指標指向的內容,保證指標指向的內容不能通過指標來改變。但是指標變數本身的內容可變。
  2. const如果放在*的右邊,修飾的是指標變數本身,保證了指標變數的內容不能修改,但是指標指向的內容,可以通過指標改變。
如果有覺得不好的地方或者需要改進的地方,可在下方評論區留言,謝謝!

相關文章