從C到C 新增基礎與難點複習

2021-10-03 20:39:39 字數 3553 閱讀 8184

1.注意與cin的》區分,cout是<<

2.endl用於換行

3.cout是從後向前執行,《操作符的遞迴呼叫,先遞迴執行的是最後乙個,引數壓棧的順序是從右向左,輸出則是從左到右。

例:

#include#includeusing namespace std;

int main()

輸出:

2    1

4*str2:e *str2++ :h

*str2 e

str :hello world

1.宣告:一條負責為程式引入乙個新的名字的語句,並指定型別。

2.定義:描述語句的具體實現方法

3.在標頭檔案中只做宣告,不要定義,在cpp檔案中進行定義

4.若在標頭檔案中寫出了int a;這樣的語句,而在cpp檔案中再次int a;則是錯誤的

應在標頭檔案中int a;前加extern關鍵字,表示現在有乙個int型變數叫做a

cpp中的int a;表示告訴編譯器這個叫a的int型變數在這裡

5.speaking of extern,extern const int a表示有個整型變數a,在此處為不可修改

6.c++支援在定義變數的同時使用,如

for( int i = 0 ;  i < 10 ; i++ )

1.標頭檔案:一般無需加.h字尾,呼叫c的庫只需在前面加c,後面也不需要加.h字尾

例如:#include

萬能標頭檔案:#include

該標頭檔案包含了c++所有的庫,但有些編譯器會提示無該標頭檔案(如win端的visual studio和mac端的xcdoe)

2.型別:定義一組可能的值,以及一組物件上的操作。

3.物件:存放某型別值的記憶體空間。

4.值:一組二進位制位,具體的含義由其型別決定。

5.更加通用的初始化方法:

?:int i      /    int i =        //等號在此時可省

6.兩個「不變」:

(1)const:主要用於說明函式介面。

(2)constexpr:主要用於說明常量,作用是允許將資料置於唯讀記憶體中以提公升效能。

7.空指標表達方式:nullptr,而null在c++作為乙個巨集其值為0

8.範圍for迴圈(預先定義陣列 int v = )

(1)for ( auto x: v) cout《輸出:12345

(2)for ( auto & x : v ) cout《輸出:12345

二者區別是:第二種用於不希望將v的值拷貝到變數x中,而只想令x指向乙個元素時

9.在c++中,這兩個函式仍然可以使用,但是c++又新增了兩個關鍵字,new 和 delete:new 用來動態分配記憶體,delete 用來釋放記憶體。

用 new 和 delete 分配記憶體更加簡單:

int *p = new int;  //分配1個int型的記憶體空間delete p;  //釋放記憶體

new 操作符會根據後面的資料型別來推斷所需空間的大小。

如果希望分配一組連續的資料,可以使用 new:

int *p = new int[10];  //分配10個int型的記憶體空間delete p;

用 new 分配的記憶體需要用 delete 釋放,它們是一一對應的。

和 malloc() 一樣,new 也是在堆區分配記憶體,必須手動釋放,否則只能等到程式執行結束由作業系統**。為了避免記憶體洩露,通常 new 和 delete、new 和 delete 操作符應該成對出現,並且不要和c語言中 malloc()、free() 一起混用。

在c++中,建議使用 new 和 delete 來管理記憶體,它們可以使用c++的一些新特性,最明顯的是可以自動呼叫建構函式和析構函式,後續我們將會講解。

10.在c++中定義或宣告乙個函式時,有時會在形參中給它賦乙個初始值作為不傳引數時候的預設值,

例如:int fun ( int a = 10 ) ;

代表沒有傳參呼叫的時候,自動給a賦乙個10的初始值。               

且賦初始值遵循從右至左的順序。

例如:int  fun(int a ,int b = 10);

int  fun(int a = 20,int b);

可以,但若反轉這是錯誤的。

11. 傳引用和傳常量引用

函式傳值傳遞的是拷貝,在傳遞占用空間小的值時簡單,直接,高效,但若較大,則代價高昂,此時可採用傳(常量)引用的方式。

例如,void print(vector& v);                         //引用引數需要指向乙個變數,而非常量

若不想讓函式內部意外修改引數的值,則上述宣告可寫作:

void print(const vector& v);

盡量少的使用傳引用的方式,若使用,認為函式必定修改了這個值。

12.引用的語法機制

?:

int i=7,&r=i;

r=9;

i=10;

cout << r <<' '<< i << endl;

輸出:10 10

也就是說,任何對r的使用實際都是對i的使用,反之亦然。

13.constexpr函式要求必須非常簡單,只可包含一條return語句(c++11)或簡單的迴圈語句(c++14)

14.變數的銷毀順序與建立順序相反(後進先出原則)

15.為解決合作開發時的命名衝突的問題,引入命名空間的概念。

16.盡量避免在表示std以外的地方使用using語句

(1)const修飾指標——常量指標

int a=10;

const int *p = &a;

特點:指標的指向可以修改,但是指標指向的值不可以修改

*p = 20;      //錯誤,指標指向的值不可以修改

p=&b;        //指標指向可以改

//可以理解為const離&a太遠,不能限制指標的指向

(2)const修飾常量——指標常量

int a =10;

int * const p = &a;

特點:指標的指向不可以改,指標指向的值可以改

//可以理解為const在*後面,不能限制其解引用,也就不能限制其修改值

*p = 20;        //正確,指向的值可以改

p=&b;          //錯誤,指標指向不可改

(3)const既修飾指標,又修飾常量

int a = 10;

const int * const p =&a;

特點:指標的指向和指標指向的值都不可以改

*p = 20;          //錯誤,指標指向的值不可修改

p = &b;          //錯誤,指標的指向不可修改

(1)int *p[3];     

指標陣列:本質為儲存3個指標的陣列

(2)int *(p[3]);

指標陣列

(3)int (*p)[3];

陣列指標:本質為儲存乙個含有3個元素的陣列的指標

訪問值用」.」運算子

訪問指標用」->」運算子

C基礎複習

c基礎複習 1.資料型別 有符號數是最高位為符號位,0代表正數,1代表負數。無符號數最高位不是符號位,而就是數的一部分,無符號數不可能是負數。當我們寫程式要處理乙個不可能出現負值的時候,一般用無符號數,這樣可以增大數的表達最大值。有符號 signed 無符號 unsigned 預設情況下,定義變數時...

從c到c 引用與常引用

下面的寫法定義了乙個引用,並將其初始化為引用某個變數。型別名 引用名 某變數名 int n 4 int r n r引用了 n,r的型別是 int 某個變數的引用,等價於這個變數,相當於該變數的乙個別名。例 int n 4 int r n r 4 cout r 輸出 4 cout n 輸出 4 n 5...

c陣列與指標難點

include stdafx.h include using namespace std int tmain int argc,tchar argv ptr2是乙個指向 int 的指標,即ptr2的型別和 ptr是一樣的,注意 ptr指向的記憶體區域不定長 int ptr2 3 ptr3是乙個指向 ...