1.void型指標
int *x = malloc(sizeof(int) * 10);在c裡面是合法的,但是在c++中編譯不通過。從bjarne stroustrup給出的解釋是這種型別是不安全的。就是說你可以使用乙個void型的指標指向任何位址,如果你分配了乙個位址給這個void指標指向另乙個與它型別不同的指標,完全沒有警告。
接著文章中又給出了乙個例子。
int an_int;
void *void_pointer = &an_int;
double *double_ptr = void_pointer;
*double_ptr = 5;
當你分配了乙個*double_ptr的值為5時,它在記憶體中占有了8個位元組,但是int型的變數an_int只有四個位元組大小。
2.指向陣列的指標的分配和釋放:new and delete
在c中,只有主要的乙個記憶體分配函式:malloc。可以使用它給單個元素和陣列分配空間:
int *x = malloc( sizeof(int) );
int *x_array = malloc( sizeof(int) * 10 );
釋放資源:free( x );
free( x_array );
但是在c++中,對於陣列的記憶體分配與單個元素的分配不同,我們要是用new and delete
int *x = new int;
int *x_array = new int[10];
delete x;
delete x;
乙個簡短的解釋是,當你建立乙個陣列物件的時候,delete為陣列中的每乙個元素呼叫了析構函式,而delete並不這麼做。
3.函式要先申明然後才能呼叫。
儘管大多數的c**都遵從這個慣例,但是在c++中卻是嚴格要求函式必須在使用之前申明。下面給出了乙個在c中合法,但是在c++中非法的**。
#include
int main()
int foo()
4.在c中使用使用struct和enum
在c中我們必須要用關鍵字struct新增在用乙個結構體去申明乙個結構體物件的前面。在c++中我們可以使用如下**:
struct a_struct
;a_struct struct_instance;
這樣我們就獲得了乙個a_struct型別的例項struct_instance。而在c中,我們在申明乙個例項的時候,不得不多使用乙個struct關鍵字。struct a_struct struct_instance;
事實上,在申明enum的時候也有乙個相似的情形:在c中,我們也不得不多使用關鍵字enum去申明乙個enum型別的例項。而c++中不需要這麼做。作為乙個注意點,大部分的c程式設計師都習慣使用typedef
typedef struct struct_name
struct_name_t;
然後就可以用如下方式申明乙個物件了
struct_name_t struct_name_t_instance;
但是有另乙個應該告訴c++程式設計師的是:你仍然要使用struct struct_name這種語法來申明乙個struct成員,相當於指向結構體得指標。(意思是說在乙個結構體中申明乙個另乙個結構體的物件)
typedef struct struct_name
struct_name_t;
5.c++有乙個更大的庫
c++比c有乙個大的多的庫,而且當他們不是用c的時候會通過c++鏈結到別的地方。例如,如果你習慣於用g++來處理需要大量資料處理的話,當你使用gcc去編譯c的時候,你就很吃驚的發現出現了上述的情況,你需要顯示的包含math這個庫來處理諸如sin 或者甚至sqrt:
% g++ foo.cc
or% gcc foo.c -lm
6.沒有布林型別
c中沒有提供乙個本地的布林類想。然而你可以使用enum來模仿乙個布林型別
typedef enum bool;
7.main函式不會自動提供0作為返回值(return 0)
在c++中,你可以在main函式的末尾隨便的丟掉return 0,這條語句,它會被自動的提供。
int main()
但是在c中,你必須手動的新增:return 0
int main()
C 與C的區別
l c如果不寫返回值,預設是int,而c 中不能不寫返回值 可用void表示無返回值 如func1 l int func1 在c中表示可帶任意引數的函式,這是c的漏洞,使得它避開了引數型別檢查 而c 中表示不帶引數的函式。2 標頭檔案的區別 l c 的標頭檔案去掉了c中的.h,以c字首開始。比如,變...
C與C 的區別
在很大程度上,標準c 是標準c的超集.實際上,所有c程式也是c 程式,然而,兩者之間有少量區別.下面簡要介紹一下最重要的區別.在c 中,民,區域性變數可以在乙個程式塊內在任何地方宣告,在c中,區域性變數必須在程式塊的開始部分,即在所有 操作 語句之前宣告,請注意,c99標準中取消了這種限制.在c中,...
C與C 的區別
在很大程度上,標準c 是標準c的超集.實際上,所有c程式也是c 程式,然而,兩者之間有少量區別.下面簡要介紹一下最重要的區別.在c 中,區域性變數可以在乙個程式塊內在任何地方宣告,在c中,區域性變數必須在程式塊的開始部分,即在所有 操作 語句之前宣告,請注意,c99標準中取消了這種限制.在c中,按如...