C 基本語法,入門及提高(5)

2021-08-07 03:06:20 字數 3702 閱讀 8720

容易混淆的:函式指標—指標函式;陣列指標——指標陣列;類模板——模板類;函式模板——模板函式。

c++包含過程程式設計,面對物件程式設計和通用程式設計(模板);c只有過程程式設計.

> 有符號和無符號int的區別

int就是signed int,書上寫的時候都是用[signed] int表示signed可以省略,int 預設是 signed int 也就是說是有符號整型,最高位是符號位,資料只佔31位;

unsigned int是無符號整型,最高位也是資料位,資料佔滿32位。

> c c++在語法上的區別

c語言和c++語言在語法上面的部分區別 -

c和c++是兩門不同的語言,在平常使用中經常出現混編的情況,因此,搞清楚c和c++語法的某些差別很重要,使得我們清楚哪些語句是可以寫在c檔案裡,哪些只能寫在cpp檔案裡的。

1,在c++中,區域性變數可以在乙個程式塊內在任何地方宣告,在c中,區域性變數必須在程式塊的開始部分,即在所有"操作"語句之前宣告,請注意,c99標準中取消了這種限制。例如:在c++中,for語句中可以出現for(int i=0;i<5;i++),即定義i的同時使用它;但在c中不能這樣,只能先定義,然後再使用。int i;for(i=0;i<5;i++)。

2,在c中,按如下方式宣告的函式沒有對函式引數進行任何說明;

int func(); 也就是說,如果沒有在函式後面的括孤內指定任何引數,這在c中就意味著對函式引數未做任何宣告,該函式可能有引數,也可能沒有引數,然而,在c++中,這樣的函式宣告意味著該函式沒有引數,也就是說,在c++中,下面這兩個函式宣告具有同樣的作用:

int func();  int func(void);

在c++中,引數列表中的void是任選的.許多c++程式設計師使用它們是為了表明函式沒有任何引數的,以便於他人理解程式.但是,從技術上說,void不是必須的。

3,在c++中,所有函式均必須被設計成原型,但這在c中只是一種選擇.程式設計經驗表明,在程式中也應該給函式採用原型設計方法。

4,在c與c++之間還存在乙個重要而又細微的差別,即字元常數在c中被自動作為整形來處理,但在c++中則不然.

5,在c中,多次宣告乙個全域性變數雖然不可取,但不算錯.在c++中,多次宣告同乙個全域性變數會引發錯誤.

6,在c中,乙個識別符號可以至少31個有效的組成字元.在c++中,乙個識別符號的所有組成字元均是有效的.可是,從實用角度看,過長的識別符號沒有太大的用處,不僅不便於記憶,而且還會增加出現打字錯誤的可能性.

7,在c中,在程式內部呼叫main()函式的情形不常見,但這種做法是容許的,在c++中,這種做法是不容許的. 

8,在c中,無法獲得register型的位址,在c++中則可以獲得這種位址.

9,在c中,如果型別宣告語句中沒有指定型別名,該型別被假定成int,這種隱式轉型在c99與c++中是不允許的.

10,標準c++所定義的新式頭部檔案,新式c++頭部檔案不再使用.h副檔名。如:#include #include

11,類與結構體的區別:類與結構體是相互關聯的

結構是c的一部分,c++從c中繼承了結構,在語法上,類與結構十分相似,在關係上,這兩者也很接近,在c++中,結構的作用被拓寬了,進而使結構成為了類的一種替代方法.實際上,類與結構的惟一區別在於:在預設狀態下,結構的所有成員均是公有的,而類的所有成員是私有的.除此之外,類與結構是等價的,也就是說,乙個結構定義了乙個類的型別.

c++同時包含這兩個等價的關鍵字struct與class基於3個方面的原因.第一,加強結構的能力.在c中,結構提供了一種資料分組方法,因而讓結構包含成員函式是乙個小小的改進.第二,由於類與結構是相互關聯的,所有現有c**到c++的移植變得更容易.第三,由於類與結構的等價性,提供兩個不同的關鍵字可以使類定義自由發展,為了保持c++與c的相容性,結構定義必須始終受它的c定義的結束.

即使在有些地方可以使用結構來代替類,但盡量不要這麼做,為了清楚起見,該用類的地方就用class關鍵字,該用c結構的地方就用struct關鍵字.

12,類與聯合是相互關聯的

聯合也可以用來定義類.在c++中,聯合包含成員函式,變數以及構造與析構函式.c++聯合保留了c聯合的全部特徵,其中最重要的特徵是所有資料元素共享記憶體的相同位址.與結構類似,聯合的成員在預設狀態下也是公有的,並且完全相容於c.與結構一樣,c++中的聯合宣告定義了一種特殊的類,進而意味著保持了類的封裝原則.

c++的聯合有幾個必須遵守的使用限制.第一,聯合不能繼承其他任何型別的類.第二,聯合不能是基類,不能包含有虛函式成員.靜態變數不能是聯合的成員.聯合不能使用引用成員,而且不能有任何作為成員的過載賦值運算子的物件.第三,如果乙個物件包含明確的構造或析構函式,該物件不能成為聯合的成員.

c++有乙個叫做匿名聯合的特殊聯合.匿名聯合沒有型別名,也不宣告任何變數,只是告訴編譯程式它的成員變數共享乙個記憶體位址.但是,變數本身無需要使用常規的點運算子語法即可直接引用.

上述聯合的使用限制也適用於匿名聯合,但下面這兩個限制除外,第一,匿名聯合所包含的元素只能是資料,不能包含成員函式,也不能包含私有或受保護元素;第二,全域性匿名聯合必須宣告成靜態的.

13,在c++中定義struct,union和enum型別的變數時,關鍵字struct,union和enum可以省略;在c中不能忽略。

14,在c++中,可以用const型別的整數作為陣列的大小,而在c中不可以。

15,在c中,const型別的變數是對外可見的,所以只能出現在原始檔中;而在c++中,const型別的變數只有內部可見,所以可以出現在標頭檔案中。例如:在c原始檔中通過語句const int i = 2;定義i,因為它是對外可見的,所以在其它的模組中可以通過宣告extern const int i;來引用它;而在c++中,因為const型別的變數預設只有內部可見,如果想定義對外部可見的變數,必須用extern修飾,例如用extern const int i = 2;定義變數i,如果是在c++檔案中定義乙個在c中使用的變數,可以用extern "c" const int x=10;語句。

16,動態開闢記憶體 c中用malloc 和free,c++中用new和delete或者delete

17.因為c++中有new關鍵字,所以可以使用new動態分配陣列,這樣陣列在定義的時候其大小可以根據執行中的資料進行指定,用完後使用delete 刪除。而在c中,陣列定義的時候必須明確指定其大小。

-- 一些區別:

c:編寫c**,寫出來的是c**。c++:編寫c++**,寫出來的是還是c**。

c:執行時記憶體錯誤。c++:看起來像是執行時記憶體錯誤。

c:編譯器警告你。c++:編譯器警告它自己。

c:1天學會,1年掌握。c++:1年學會,-1年掌握。

c:goto有害。c++:c++可以無害。

c:入門語言。c++:出門語言。

c:面向過程。c++:面向c++。

c:一切皆指標。c++:一切皆編譯器。

c:爛**能輕易編過,也能輕易調過。c++:爛**不能輕易編過,也不能輕易調過。

c:說精通的可能精通。c++:說精通的肯定不精通。

-- 檔案讀寫操作

c語言檔案讀寫操作總結 -

c檔案讀寫函式介紹**)-

#include "stdio.h"   

#include

int main()   

while((ch=fgetc(fp))!=eof)          

fclose(fp);   

printf("\n"); 

}   

#include "stdio.h"   

int main()   

while(!feof(fp))  

fclose(fp);  

}

C C 基本語法,入門及提高(3)

虛函式和多型,封裝與繼承 多型就是要通過基類介面來使用派生類,如果基類還需要知道派生類的資訊 c 語言中自帶物件導向支援,如封裝 繼承 多型等物件導向的基本特徵。c 原本是面向過程的語言,自身沒有內建這些特性,但我們還是可以利用 c 語言本身已有的特性來實現物件導向的一些基本特徵。接下來我們就一一來...

C 基礎語法入門 5 陣列

5.3 二維陣列 黑馬程式設計師匠心之作 c 教程從0到1入門程式設計 學習筆記 目標 對c 有初步了解,能夠有基礎程式設計能力 案例 通訊錄管理系統 特點一 陣列,就是乙個集合,裡面存放了相同型別的資料元素 特點二 陣列是由連續的記憶體位置組成的 定義有三種方式 資料型別 資料名 陣列長度 int...

C 基礎語法入門 5 陣列

2.二維陣列 所謂陣列,就是乙個集合,裡面存放了相同型別的資料元素。特點1 陣列中的每個資料元素都是相同的資料型別 特點2 陣列是由連續的記憶體位置組成的 資料型別 陣列名 陣列長度 資料型別 陣列名 陣列長度 資料型別 陣列名 可以通過下標來訪問陣列中的元素,從0開始索引 int arr 5 fo...