C 和 C 的比較

2021-08-11 03:29:50 字數 1734 閱讀 5073

c是乙個結構化語言,它的重點在於演算法和資料結構。c程式的設計首要考慮的是如何通過乙個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制)即c是面向過程的。

c++,首要考慮的是如何構造乙個物件模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取物件的狀態資訊得到輸出或實現過程(事務)控制即c++是物件導向的。

所以c與c++的最大區別在於它們的用於解決問題的思想方法不一樣。之所以說c++比c更先進,是因為「 設計這個概念已經被融入到c++之中 」。

具體比較:

(1)c++與c語言相比有何特點

全面相容c語言(c是c++的子集);支援物件導向程式設計;c++的可重用性、可擴充性以及可維護性較好。

(2)c++與c語言程式結構有何不同

c語言的程式結構主要包括預處理程式、自定義型別說明、常量定義、函式定義以及主函式定義幾大部分;

c語言的程式結構在c++中也是適用的,此外c++還有類的定義和使用兩個主要組成部分。

(3)c++與c語言如何處理輸入輸出

c語言中使用scanf()函式實現格式化輸入,使用printf()函式實現格式化輸出。如果輸入和輸出函式中格式化型別與實際型別不符時,c編譯器無法檢查出錯誤,但是程式執行時會出現問題。

c++採用了流的形式來控制輸入和輸出操作,cin為標準輸入流,cout為標準輸出流;即使輸入輸出語句中定義了不同型別的資料,在編譯和執行過程中將不會出現任何錯誤資訊。

(4)c++與c語言中區域性變數的宣告方式有何不同

c語言中,全域性變數必須宣告在所有函式之前,區域性變數必須宣告在所有可執行語句之前;

c++中允許在**模組中的任意位置對區域性變數進行宣告。

(5)c語言允許函式過載麼?c++對於函式過載有什麼要求?

(在同乙個作用域中,如果有多個函式的名字相同,但是形參列表不同(個數不同、型別不同、引數排列順序不同等),返回值型別可同也可不同,我們稱之為過載函式。

過載的函式是通過形參列表區分的,與返回值型別無關。)

c語言中不存在函式過載的概念,不允許出現名稱相同的函式; 

c++允許過載函式,即對於函式引數型別不同、引數個數不同或者引數型別和個數都不同的情況。

(6)處理動態儲存分配問題時c++和c語言有何不同?

c語言中使用malloc()函式分配動態記憶體空間,使用free()函式釋放動態記憶體空間;由於malloc函式返回的是void型指標,因而需要強制轉換型別。

c++新新增了new和delete操作符,new可以自動計算所要分配的記憶體大小,並返回正確的指標型別;new 可以自動呼叫建構函式。(堆區分配記憶體,必須手動釋放)

(7)函式的預設引數

c語言不支援函式預設引數;

c++定義函式時可以給形參指定乙個預設的值,這樣呼叫函式時如果沒有給這個形參賦值(沒有對應的實參),那麼就使用這個預設的值。即呼叫函式時可以省略有預設值的引數。如果使用者指定了引數的值,那麼就使用使用者指定的值,否則使用引數的預設值。

(預設引數除了使用數值常量指定,也可以使用表示式指定,並且c++規定,預設引數只能放在形參列表的最後,而且一旦為某個形參指定了預設值,那麼它後面的所有形參都必須有預設值。因為實參和形參的傳值是從左到右依次匹配的,預設引數的連續性是保證正確傳參的前提)

C 引用比較和內容比較

1 靜態方法object.referenceequal,實際實現為引用比較。2 靜態方法object.equal,實際實現為引用比較。實際呼叫了例項方法equal 3 object例項方法equal,實際實現為引用比較。微軟原意equal應該為內容比較,但預設實現並不是這樣,開發者可以通過在自己設計...

Swift 和 C 的語法比較

昨天看到jacob leverich 寫了一篇文章 swift is a lot like scala 介紹swift 和 scala 的語法對比,從這篇文章的確可以看到swift 的語法和 scala 高度的相似。由於本人在搞ios開發之前增加搞過多年的.net 開發,於是技癢,昨晚抽了點時間寫了...

c和c 檔案操作比較

我在這裡比較下c語言和c 的檔案操作。首先是幾個基礎問題。typedef basic ifstream ifstream typedef basic ofstream ofstream typedef basic fstream fstream 查了下stlport,stlport stl iosf...