c c 基礎夯實及特性

2021-08-28 09:32:33 字數 1980 閱讀 5130

c++有面向過程的c語言,物件導向的繼承、封裝、多型、stl庫、泛型程式設計、c11的智慧型指標、自動型別推導、正規表示式等新屬性。

-- c++中「箭頭(->)」和「點號(.)」操作符的區別

class a    

如果定義如下:a *p則使用:p->play(); 左邊是結構指標。a p 則使用:p.paly(); 左邊是結構變數。

總結:箭頭(->):左邊必須為指標;點號(.):左邊必須為實體。

-- 函式過載和多個建構函式,以及析構函式

函式過載並不屬於類的特性,是眾多高階語言都有的一種函式特性

c語言中變數的引用傳遞和指標-

-- c語言中引用及指標;指標的引用,解引用與脫去解引用

(引用型變數儲存的是變數的位址,指標儲存的也是變數的位址)

1.引用:引用是乙個變數的另乙個名字,又稱別名。定義方式: 

int a=10; 

int &b=a;在這裡,意思就是給a變數起了乙個新名字b,因此b不可再次被重新定義。 

引用必須初始化,無空引用,並且引用不分等級。 

2.引用與指標的異同點: 

相同點:在引用中 int &b=a;這一句**可被編譯器看做int * const b=&a;//加上const的作用是表明指標b的自身的值(a的位址)不能改變,而指向的值(a的值)可以改變。也就是說引用相當於指標,引用與指標在編譯時的方法一樣,指向的都是變數的記憶體位址。 

2.引用只能對已經存在的變數或物件實現引用,而指標則不需要,可以定義為空。 

3.在函式的傳參中,如果傳遞的是乙個引用,意味著這個變數或物件已經存在了;如果傳遞的是乙個指標,則不能判斷這個指標是不是有效的,是不是空的,因此在函式體 中大多數都得進行指標是否為空的判斷。但是雖然引用較為安全,但是利用指標來傳參效率較快。 

4.引用是直接訪問變數,不用分配自己的記憶體空間,而指標是間接訪問,需要定義,需要有自己的記憶體空間。 

這2個方法是等效的:void swap(int &a,int &b)

void swap(int *const a,int *const b)

使用引用型變數,子函式中所有的操作會直接修改主函式中的實參。正常情況下,使用變數的引用總是沒有問題的,引用是位址的拷貝。

程式設計的本質不就是改變量麼?通過引用型變數和指標型變數可以讓子函式直接改主函式中的變數,而不再需要為形參開闢記憶體。用了引用變數後,就不再為形參開闢記憶體,所有操作都是直接修改實參變數。指標指向一塊記憶體,它的內容是所指記憶體的位址;引用是某塊記憶體的別名。

程式設計的本質就是修改變數。除錯程式的本質就是跟蹤變數。

函式指標就是指向函式的儲存空間位址的指標,可以對函式指標進行賦值並且通過函式指標來呼叫函式,它的本質是乙個指標。

而指標函式只是說明它是乙個返回值為指標的函式,其本質是乙個函式。

- 在c++中,指標和引用經常用於函式的引數傳遞,然而,指標傳遞引數和引用傳遞引數是有本質上的不同的:

指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值。(這裡是在說實參指標本身的位址值不會變)

而在引用傳遞過程中,被調函式的形式引數雖然也作為區域性變數在棧中開闢了記憶體空間,但是這時存放的是由主調函式放進來的實參變數的位址。被調函式對形參的任何操作都被處理成間接定址,即通過棧中存放的位址訪問主調函式中的實參變數。正因為如此,被調函式對形參做的任何操作都影響了主調函式中的實參變數。

c/c++結構體與結構體指標-

-- c語言結構體指標,結構體指標的定義和引用

結構體本質是一種資料型別,和c語言的內建內型(char,int,long …)類似,我們可以用它來定義變數。

結構體指標,就是指向結構體的指標。

那麼在c語言中 . 號是成員訪問運算子,當我們需要訪問結構的成員的時候,就會使用到它;

而當我們需要使用結構體指標來訪問結構成員的時候,就得使用->運算子了。

夯實基礎 堆排序

堆結構 任意的乙個父節點大於其子節點。邏輯結構 二叉樹 物理結構 陣列 如果從角標0開始 父節點左孩子節點 2 i 1 父節點右孩子節點 2 i 2 最後乙個非葉節點 n 1 2 如果從角標1開始 父節點左孩子節點 2 i 父節點右孩子節點 2 i 1 最後乙個非葉節點 n 2 堆排序分析 最優時間...

Java基礎夯實三

1.宣告位置不同 成員變數也就是屬性,在類中宣告的。區域性變數,在方法中宣告或 塊中宣告。2.初始值不同 成員變數如果沒有賦值則是有預設值的,資料型別不同則預設值不同。區域性變數是沒有預設值,也就是說必須先宣告,再賦值,最後才使用。3.在乙個類中,區域性變數可以與成員變數同名,但是區域性變數優先,如...

夯實基礎js 語句篇

下面這些值將被計算出 false also known as falsy values 當傳遞給條件語句時,所有其他值,包括所有物件會被計算為 true 請不要混淆原始的布林值true和false 與 布林物件的值true和false 譯者注 下例中b屬於物件,會被計算為true!例如 var b ...