C C 學習筆記6 const運用(1)

2021-06-23 04:31:47 字數 1871 閱讀 8339

1、在說明const之前首先提出乙個問題:const有什麼用途?

(2023年某公司面試題)

解析:在c程式中,const的用法主要有定義常量、修飾函式引數、修飾函式返回值

在c++程式中,它還可以修飾函式的定義體,定義類中某個函式為恆態函式,即不改變類中的資料成員。

答案:(1)可以定義常量

(2)const可以修飾函式的引數和返回值,甚至函式的定義體。被const修飾的東西受到強制保護,可以預防意外的變動,能提高程式的健壯性。

這是乙個面試題,那我們以面試題為切入點,來展開,在c/c++中const到底是怎麼用的?

在書中引入const限定符的時候是這麼介紹的:

以乙個迴圈語句為例:

for(int index = 0;index != 512;++index)

在這個迴圈語句中要比較index與512的大小。假設這個程式非常龐大,512出現了100次,另外這100次中有80次表示某一特殊緩衝區的大小,剩餘20次用於其他目的。現在我們要把這個緩衝區的大小增大到1024。那就給**的維護帶來很大的麻煩,我們需要一次次的檢查512出現的位置,以便確定哪些512表示緩衝區的大小,哪些不是。

為了解決這個問題,我們來修改這個**:

我們可以使用乙個初始化為512的物件:

int bufsize = 512;

for(int index = 0;index != 512;++index)

這樣解決起來似乎就解決了這個問題,工作量也明顯表少。但是此時還有個問題,就是bufsize是可以被修改的,bufsize可能被有意或者無意的修改。

那如何解決呢?

此時就有了const限定符來解決這個問題,它把乙個物件轉換成乙個常量。

const int bufsize = 512;//此時的bufsize是不可以修改的。

/*******************此時就回答了乙個問題就是:const可以定義常量***************/

2、const的全域性訪問與區域性訪問的問題?

與其他的變數不同,除非特殊說明,在全域性作用域宣告的const變數是定義該物件檔案的區域性變數,簡單的說只存在於那個檔案中,不能被其他檔案訪問。那如何處理這個區域性全域性化的問題呢?

解決:可以通過指定const變數為extern,就可以再整個程式中訪問const物件:

案列://file_1.cc

extern const int bufsize = fcn();

//通過fcn的返回值來定義和初始化bufsize,定義為extern意味著可以被其他檔案使用

//file_2.cc

extern const int bufsize;

//同樣的是乙個extern的宣告,但是沒有初始化。

for(int index = 0;index != bufsize;++index)

/****這地方就是解釋了const的第二個作用:可以修飾函式的返回值和引數,在c++程式中,它還可以修飾函式的定義體****/

3、const與#define相比有什麼不同?

分析:在回答這個問題的時候,我們先要了解下巨集定義這個問題,巨集定義是c提供的預處理功能的一種,巨集定義主要是用乙個指定的識別符號(即名字)來代表乙個字串。如#define pi 3.14

const也是限定了乙個變數來表示常量,且這個變數不能夠修改。

說白了共同點:二者都可以定義常量。

(1)const常量具有資料型別,比如int char啊之類的,而#define沒有資料型別。編譯器可以對前者進行安全型別檢查,而對後者只進行字元替換,這樣運用#define可能會產生意想不到的錯誤(邊際效應)

(2)有些整合化的除錯工具可以對const常量進行除錯,但是不能對巨集常量進行除錯。在c++程式中只使用const常量而不使用巨集常量,即const常量完全取代巨集常量。

c c學習筆記 (6)

關於運算子過載 不可過載的運算子 賦值 下標 呼叫 成員訪問箭頭 運算子 相對的解引用 也應該是成員函式 必須是成員函式,復合賦值運算子一般來說也應該是成員。改變物件狀態的運算子如自增 自減 解引用等通常也應該是成員,對於這些成員運算子函式應該返回所屬類的乙個物件。具有對稱性的運算子可能轉換任意一端...

c c 學習筆記 6

今天主要學習到的是靜態變數 static 暫存器變數 register 初始化 遞迴 預處理器。比較容易混淆的是關於靜態變數的,而靜態變數分為 靜態區域性變數和靜態全域性變數。靜態區域性變數 1 靜態區域性變數在函式內定義 它的生存期為整個源程式,但是其作用域仍與自動變數相同,只能在定義該變數的函式...

c c 學習筆記1

2019.7.8 1 c資料型別有哪些 int,float double,char,int 指標,指向不同型別前面的修飾不同 void 無型別 struct 結構 union 聯合 c型別修飾符 long 8位16進製制 short 4位16進製制 un signed有無符號,陣列 int 變數名 ...