c語言 常見問答細節點(19)

2021-07-24 23:52:35 字數 1206 閱讀 7389

const意味著唯讀,而本質上,const在誰的後面,誰就不可以被修改,如果const在最前面修飾,則向後推一位。

1) 關鍵字const的作用是為給讀你**的人傳達非常有用的資訊,實際上,宣告乙個引數為常量是為了告訴使用者這個引數的應用目的。

2) 通過給優化器一些附加的資訊,使用關鍵字const也許能產生更緊湊的**。

3) 合理地使用關鍵字const可以使編譯器保護那些不希望被改變的引數,防止其被無意的**修改。簡而言之,這樣可以減少bug的出現。

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

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

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

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

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

[1]從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。

[2]在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

[3]從堆上分配,亦稱動態記憶體分配。動態記憶體的生存期由程式設計師決定,使用非常靈活,但如果在堆上分配了空間,就有責任**它,否則執行的程式會出現記憶體洩漏,頻繁地分配和釋放不同大小的堆空間將會產生堆內碎塊。

1) int a; 乙個整型數a

2) int *a; 乙個指向整型數的指標a

3) int **a; 乙個指向指標的指標,它指向的指標是指向乙個整型數

4) int a[10]; 乙個有10個整型數的陣列

5) int *a[10]; 乙個指標陣列,陣列存放了10個指標,指標指向了乙個整型數

6) int (*a)[10]; 是乙個陣列指標,陣列裡存放了10個整型數

7) int (*a)(int); 是乙個函式指標,該函式引數為整型數,返回值為整型

8) int (*a[10])(int);是乙個函式指標陣列,陣列裡面存放了10個函式指標,該函式的引數為整型,返回值也為整型

C語言細節

參考 注釋必須和 一起維護,不應該描述顯而易見的事,或把別的地方已說清楚的東西在說一遍。字面常量沒有語義,也沒有真正的記憶體位址。所以不可以取其位址,也不可以用於初始化普通引用,例如 long r1 40000 但是const long r1 40000 卻是合法的。所以,盡量不要使用字面常量,而應...

C語言細節

a b 先賦值再自增 a b先自增再賦值 float 6 4是1.500000 float 6 4 是1.000000 原始檔.c 目標程式.obj 執行程式.exe 都是二進位制檔案 源程式以ascii 形式存於文字檔案 c程式演算法可無輸入必須要有輸出 三種基本結構可以完成任何複雜的任務 大括號...

C語言細節

1.c誰呼叫了main函式 linux執行乙個程式就是建立乙個新程序,然後把這個程式丟到這個程序中執行直到結束。linux通過.task執行程式,新程序作為命令程序的乙個子程序執行。main函式的返回值最終會返回給父程序。父程序的引數傳遞給子程序。2.void型別的本質 void的意思是乙個變數還不...