關於C 的深入理解

2021-07-23 16:19:54 字數 1514 閱讀 1889

1.關於引用和指標的理解

在我自己看來有兩個方面需要重視!!

第一是c++中,*和&這兩個操作符的用法:

1)*可以作為宣告乙個指標、也可以用來作用為取值、代表位址指向的儲存單元

2)&可以作為宣告乙個引用、也可以用來作用為取位址符號

第二是指標和引用的定義和性質區別:(擷取自

inta=1;int *p=&a;

inta=1;int &b=a;

上面定義了乙個整形變數和乙個指標變數p,該指標變數指向a的儲存單元,即p的值是a儲存單元的位址。

而下面2句定義了乙個整形變數a和這個整形a的引用b,事實上a和b是同乙個東西,在記憶體占有同乙個儲存單元。

(2)可以有const指標,但是沒有const引用;(這一點說明的是指標可以隨意指向不同單元,但是引用是不可變的)

(3)指標可以有多級,但是引用只能是一級(int**p;合法 而 int &&a是不合法的)(可是宣告二重的指標,有實際意義,而二重的引用沒有意義)

(4)指標的值可以為空,但是引用的值不能為null,並且引用在定義的時候必須初始化;

(5)指標的值在初始化後可以改變,即指向其它的儲存單元,而引用在進行初始化後就不會再改變了。(這一條可以解釋第二條)

(6)"sizeof引用"得到的是所指向的變數(物件)的大小,而"sizeof指標"得到的是指標本身的大小;(我認為這一點)

(7)指標和引用的自增(++)運算意義不一樣;(必然的)

2.既然提到了const,那麼我們繼續從const入手,來整理下指標怎麼使用const:(擷取自指標

使用const

(1)指標本身是常量不可變

char* const pcontent; 

(2)指標所指向的內容是常量不可變

const char *pcontent; 

(3)兩者都不可變

const char* const pcontent; 

(4)還有其中區別方法,沿著*號劃一條線:

如果const位於*的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;

如果const位於*的右側,const就是修飾指標本身,即指標本身是常量。

在c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。

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

堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。

自由儲存區,就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。

全域性/靜態儲存區,全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同占用同一塊記憶體區。

常量儲存區,這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改。

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

關於fflush的深入理解

求fflush stdin 和fflush stdout 用法 include void main 這樣的乙個問題。假如輸入的不是3個而是大於3個時候,是不是要清空緩衝區呢?輸出的時候是不是也要清空一下呢?謝謝您幫我解答。3q gfxiang 一般不用。btw fflush 似乎只對輸出緩衝區清空,...