C 理論概述及其對C語言的公升級

2021-07-26 16:47:25 字數 3843 閱讀 4293

1、為什麼選擇c++語言?

首先其作為嵌入書工程師的崗位需求,其次其是物件導向的程式語言,直接分析使用者需求中涉及的各個實體,在**中描述現實世界中的實體,關聯各個實體協同工作來解決問題,能夠適應使用者需求的不斷變化,直接利用面向過程方法的優勢,最後c++明顯的優勢在於學習

c++可以強化

c語言程式設計能力,提高程式設計的**質量,還可以幫助學習其他程式語言

2、c++為什麼難學?

c++支援過程式、資料抽象、基於物件、物件導向式、函式式、泛型形式、模板元模式

3、c++語言之父?

本賈尼·史特勞斯特盧普

4、c++的標準

c++ 98 標準

c++標準第一版,

1998

年發布。正式名稱為

iso/iec 14882:1998[17]  。

c++ 03 標準

c++標準第二版,

2003

年發布。正式名稱為

iso/iec 14882:2003[18]  。

c++ 11 標準

c++標準第三版,

2023年8

月12日發布。正式名稱為

iso/iec 14882:2011[19]  。

c++11對容器類的方法做了三項主要修改。

首先,新增的右值引用使得能夠給容器提供移動語義。其次,由於新增了模板類initilizer_list,因此新增了將

initilizer_list

作為引數的建構函式和賦值運算子。第三,新增的可變引數模板(

variadic template

)和函式引數包(

parameter pack

)使得可以提供就地建立(

emplacement

)方法。

c++ 14 標準

c++標準第四版,

2023年8

月18日發布。正式名稱為

iso/iec 14882:2014[21]  。

c++14是

c++11

的增量更新,主要是支援普通函式的返回型別推演,泛型

lambda

,擴充套件的

lambda

捕獲,對

constexpr

函式限制的修訂,

constexpr

變數模板化等

[22]  。

5、c++11值得學習的新特性

①智慧型指標如shared_ptr

、weak_ptr等

②rvalue reference

③function/bind

④lambda expression and closure

從c到c++

的公升級

1、宣告定義:c++中強調語言的「實用性」,所有變數在需要使用的時候再定義

如:c語言中定義迴圈是

int i;

for(i = 0 ; i < 5 ;i++);

c++定義時

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

2、register關鍵字的變化

c語言中:

register

關鍵字表示請求編譯器將其修飾的變數的值儲存到

cpu內部暫存器中,從而省去

cpu從記憶體中抓取資料的時間,提高執行效率,但是

register

只能修飾區域性變數,不能修飾全域性變數,不能用

&來獲取乙個

register

修飾的變數的位址

c++中:依然支援

register

關鍵字,可以取得

register

變數的位址,因為

c++編譯器發現程式中需要去

register

變數的位址時,

register

對變數的宣告變得無效

3、const關鍵字的變化

c++中:

const

變數對應

const

變數,非

const

變數對應非

const

變數,沒有路徑修改

const

修飾的變數

4、記憶體分配與釋放(new/delete)

①c++

中通過new

關鍵字進行動態記憶體申請

②c++

中的動態記憶體申請是基於型別進行的

③delete

關鍵字用於記憶體釋放

變數申請:

陣列申請:

type * pointer = new type;          type * pointer = new type[n];

delete pointer;                   delete pointer;

new與

malloc

函式的區別:

①new

關鍵字是

c++的一部分,是關鍵字;而

malloc是c

庫提供的函式

②new

以具體型別為單位進行記憶體分配,

malloc

只能以位元組為單位進行記憶體分配

③new

在申請單個型別變數式可進行初始化,

malloc

不具備記憶體初始化的特性

習慣使用:char * ptr = new char[100];

memset (ptr,0,sizeof(char)*100);進行初始化

5、引用vs指標(在實際應用中,引用一般用作引數傳遞與返回值)

①引用的定義:引用指某個目標變數的別名,不需要分配空間

②格式: 型別 &

引用名

= 變數名

例:int a = 1;

int &b = a;//b為

a的別名,從而a與

b是同乙個單元

注:定義引用時一定要初始化,指明該引用變數是誰的別名

6、引用:函式傳參

引用傳遞方式是在函式定義時在形參前面加上引用運算子「&」

例:void add(int &a,int &b);

①按值傳遞:但形參值得改變不能對實參產生影響

②位址傳遞方式通過形參的改變使相應的實參改變

7、引用:函式返回值

函式返回引用的乙個主要目的是可以將函式放在賦值運算子的符的左邊

注:不能返回對區域性變數的引用

例:int &add(int &num)

return temp;

8、引用於指標的區別

①引用訪問乙個變數是直接訪問,而指標是間接訪問

②引用是乙個變數的別名,本身不單獨分配自己的記憶體空間,而指標有自己的記憶體空間

③引用一經初始化不能再引用其它變數,而指標可以

④盡可能使用引用,不得已時使用指標

9、函式過載(overload)

含義:相同的作用域,如果兩個函式名稱相同,而引數不同,則稱之為過載(overload)

10、函式過載條件

過載的不同形式:形參數量不同,形參型別不同,形參的順序不同,形參數量和形參型別都不同

注:函式返回值不能作為過載的條件

11、命名空間

c語言中只有乙個全域性作用域,從而識別符號之間可能發生衝突;從而

c++中提出了命名空間的概念,命名空間將全域性作用域分成不同的部分,不同命名空間中的識別符號可以同名而不會發生衝突,命名空間可以相互巢狀

12、c++命名空間的使用

使用整個命名空間:using namespace name;

使用命名空間中的變數:using name :: variable;

使用預設命名空間中的變數: ::variable;

注:預設情況下可直接使用預設命名空間中的所有識別符號

概述C語言特性及其編譯原理

c語言是1972年由貝爾實驗室的兩名科學家丹尼斯 里奇和肯 湯普遜在b語言基礎上發明的一種高階語言,以實用為目標。隨著計算機的發展,其他的實用語言已經被丟在角落,只有c仍然是主流語言,並且是首選的程式語言之一。它的長盛不衰必定不是偶然,而是它本身的優點的必然結果。1.其設計理念讓使用者更輕鬆的完成自...

C 基礎 C 對C的公升級

1.定義的宣告 與c語言相比,c 中更加強調語言的 實用性 所有的變數都可以在需要使用時再定義 例如 for int i 0 i 10 i 兩個計數變數都可以在使用的時候定義,這時他們的作用範圍只在這個迴圈中,迴圈結束就將被釋放 在c語言中,使用 無法獲得 register 變數的位址,是因為 變數...

c語言的概述

1.1 語言的衍生過程 機器語言 高階語言 c語言 計算機的指令系統,是規定一條友若干位0和1組成的指令使計算機產生某種操作 某種 機器語言 某種型號機器語言指令的集合 它是分型號的 高階語言 比機器語言要通用一點 高階語言通過編譯系統轉化成機器語言,來控制計算機 1.2 c語言的特點 1 c程式是...