我的研發面經 C 關鍵字小結

2021-09-24 11:42:30 字數 2404 閱讀 5988

1.const:用const修飾的變數是唯讀屬性,一旦初始化後不能更改。

例:const int a;

和 int const a;

//在這兩個中const的作用是一樣的,a是乙個常整型數。

const int *a;

int * const a;

int const * a const;

//籤乙個意味著a是乙個指向常整型數的指標(也就是,指向的整型數是不可修改的,但指標可以,此最常見於函式的引數,當你只引用傳進來指標所指向的值時應該加上const修飾符,程式中修改編譯就不通過,可以減少程式的bug)。

//第二個意思a是乙個指向整型數的常指標(也就是說,指標指向的整型數是可以修改的,但指標是不可修改的)。

//最後乙個意味著a是乙個指向常整型數的常指標(也就是說,指標指向的整型數是不可修改的,同時指標也是不可修改的)。

const的作用:

(1)欲阻止乙個變數被改變,可以使用const關鍵字。在定義該const變數時,通常需要對它進行初始化,因為以後就沒有機會再去改變它了;

(2)對指標來說,可以指定指標本身為const,也可以指定指標所指的資料為const,或二者同時指定為const;

(3)在乙個函式宣告中,const可以修飾形參,表明它是乙個輸入引數,在函式內部不能改變其值;

(4)對於類的成員函式,若指定其為const型別,則表明其是乙個常函式,不能修改類的成員變數;

(5)對於類的成員函式,有時候必須指定其返回值為const型別,以使得其返回值不為「左值」。

2.restrict

我們希望某個物件(記憶體空間)不被修改的通常做法是什麼?宣告該空間的const型別,但是這樣真的可以嗎?不是的,由於const空間物件的指標是可以賦值給乙個非const值指標的。所以這仍然無法不讓該空間被修改。

const int a=10;

int * b=&a;

雖然,編譯器會報警告「 警告:初始化丟棄了指標目標型別的限定」,這個意思是,b失去了對目標物件的const的限定。但是通過,並且,可以通過指標b更改它們共同指向的空間。

const int a=10;

int b=(int)&a;

int * c=(int *)b;

這 種寫法和上面的效果一樣,卻連警告都不報,這就可以看到c語言型別轉換的功能有多大,並且有多危險。當我們將a的位址轉換成int型別的時候,編譯器不會 認為這是乙個嚴重的事情(因為int型別並不能訪問記憶體空間),之後再從int型別轉換到int *型別,這個時候,編譯器也很難確定這是否會出現不安全的地方。所以,這樣一做,就騙過了c編譯器。而前面的方法中,編譯器明顯看到兩個指標之間的賦值初 始化,是有不安全的地方的(丟掉了const的物件設定),所以發出警告。

不 過,一句話,const是無法保證某個物件不被更改的。所以c99提出了乙個restrict關鍵字。它是修飾指標的,表達出的意思是,對該指標指向的空 間的訪問,只能從這個指標進入。這樣,如果該關鍵字在加上restrict,就會達到鎖定該空間。當然,restrict不一定只是為了建立乙個完全常態 的空間,它的本意是限制該空間只能通過該指標進行訪問。

restrict pointer是c99新標準提出的乙個很著名的概念叫著——受限指標。這種指標的宣告是為了,編譯達到更好的優化,它暗示編譯器,某個指標指向的空間,只能從該指標訪問。但是這種暗示卻是對程式設計師的要求,而編譯器只是在這種暗示的基礎上作一些優化。

restrict只可以用在指標身上。如果乙個指標被restrict修飾,那麼就在它(這個指標)和它所指向的物件之間建立了一種特殊的聯絡──只能用這個指標或者這個指標的表示式來訪問這個物件的值.

一 個指標指向乙個記憶體位址。同一塊記憶體可以由多個指標來訪問並在程式執行時修改它(這塊記憶體)。restrict告訴編譯器,如果一塊由乙個被 restrict修飾的指標所指向的記憶體被修改了,那麼沒有其它的指標可以來訪問這塊記憶體。編譯器可能會選擇一種方式來優化**中呼叫被restrict 修飾的指標的部分,這可能導致錯誤發生。程式設計師有責任來確保正確地按照他們所設想的來使用被restrict修飾的指標,否則的話,可能會發生意想不到的 結果。

3.static:

從字面理解,是「靜態的「的意思,與此相對應的,應該是「動態的「。

static的作用主要有以下3個:

1、擴充套件生存期;

2、限制作用域;

3、唯一性;

1、擴充套件生存期

這一點主要是針對普通區域性變數和static區域性變數來說的。宣告為static的區域性變數的生存期不再是當前作用域,而是整個程式的生存期。

在程式中,常用記憶體型別主要有堆、棧和靜態儲存區。要理解static區域性變數就必須首先理解這三種記憶體型別。

private:

public:

protected:

extern:

幾個關鍵字的小結

幾個常見關鍵字的用法小結 1.public private protected 它們用來修飾類 方法 屬性 使被修飾的類 方法 屬性的被呼叫範圍得到乙個限制。public是公開性最高的關鍵字 當它修飾乙個類的時候,被修飾的類可以被同乙個工程中的所有類的物件訪問 如工程a中有乙個類s,那麼對於a的任意...

C 的關鍵字

c 的關鍵字 auto 宣告自動變數,一般不使用 bool 宣告乙個布林型變數 break 跳出當前迴圈 asm 插入乙個彙編指令 case 開關語句分支 catch 處理throw產生的異常 char 宣告乙個字元弄變數 class const 宣告乙個常量 const case 從乙個const...

C語言 我的初成長 關鍵字

要打好c語言的基礎,對關鍵字的了解必須熟悉。關鍵字在c語言中至關重要,每乙個關鍵字都有著它自己的含義與用法,而且自己取名的時候還不能和關鍵字重名。一些簡單而且常用的關鍵字看一眼就知道,可以簡單的分乙個類,比如宣告變數或函式用到的 int,double,float,short,long char等分支...