二十一天學通C語言 使用const宣告指標變數

2021-08-23 11:49:41 字數 1280 閱讀 6557

二十一天學通c語言:使用const宣告指標變數

本文節選自《21天學通c語言》一書

已經學習了使用限定詞const宣告變數可以帶來很多好處。同樣地,限定詞const也可以用來宣告指標變數。根據const關鍵字在宣告中出現位置的不同,可以得到多種const指標型別,下面將依次進行講解。為方便表述,以int型代表資料型別名,以p代表變數名。

1.指向const的指標變數

宣告指向const的指標變數有以下兩種方式:

int const *p

const int * p

由於變數宣告中,const和資料型別名的出現次序可以隨意排列,因此,以上兩種宣告表示式是等效的。以上的兩個表示式將變數p都宣告為指向儲存const int型資料的記憶體空間的指標變數,該類指標指向的記憶體空間的內容是不可變的。例如,以下操作是錯誤的:

01 const int a = 1;

02 const int * p1 = &a;

03 04 *p1 = 2;

第4行語句通過賦值表示式改變p1指向的記憶體空間的內容,而宣告中p1指向的內容是不可改變的,因此,該語句是錯誤的。

2.const型指標變數

int * const p

該表示式宣告了乙個int型的const指標變數,即該指標變數的值是不可以改變的,也就是說const型指標變數指向的記憶體空間是固定的,初始化後不能將其指向其他空間。例如,以下操作是錯誤的:

01 int a = 1;

02 int b = 2;

03 int * const p = &a;

04 *p = 12; /* 正確 */

05 p = &b; /* 錯誤 */

第4行,對int型const指標變數指向的記憶體空間賦值是允許的;但是第5行,試圖改變const指標變數p的值,將p指向變數b的記憶體空間,這是錯誤的,因為const指標的值是不可變的。

3.指向const的const指標變數

const int * const p

該表示式宣告了乙個指向存放const int型空間的const指標變數,該指標變數的值和該指標指向的空間的值都是不可改變的。以下行為是錯誤的:

01 int a = 1;

02 int b = 2;

03 int const * const p = &a;

04 *p = 12; /* 錯誤 */

05 p = &b; /* 錯誤 */

第4行,試圖改變p指向的記憶體空間的內容,也就是p指向的變數a的值,這是錯誤的;第5行,試圖改變p的值,也是錯誤的。該指標變數的值及其指向空間的值都是不可改變的。

二十一天學通C語言 函式型指標

二十一天學通c語言 函式型指標 本文節選自 21天學通c語言 一書 c程式中的函式也都是存放在 區內的,它們同樣也是有位址的。那麼如何取得函式的位址呢?在前面也說過函式定義的時候實際上是定義了乙個函式變數,那麼是否可以將函式變數賦值給其他變數呢?回答這些問題需要涉及另外乙個概念 函式型指標。按照已有...

二十一天學通C 之使用throw丟擲異常

使用throw丟擲異常 本人節選自 21天學通c 一書 丟擲異常 也稱為拋棄異常 即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異常。該語句的格式為 throw 表示式 如果在try語句塊的程式段中 包括在其中呼叫的函式 發現了異常,且拋棄了該異常,則這個異常就...

二十一天學通C 之使用throw丟擲異常

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!使用throw丟擲異常 本人節選自 21天學通c 一書 丟擲異常 也稱為拋棄異常 即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異常。該語句的格式為 throw 表示式 如果在try語句塊的程式段中 包括在其中...