C C 面試題 C 與C有什麼不同?

2022-06-06 03:21:09 字數 3880 閱讀 6398

昨天,小編在乙個討論群裡看到這樣的對話

有人想要入學校程式設計俱樂部,面試時,學長問了她c++的區別,她沒有答上來,就沒有通過。

考點:c和c++的聯絡與區別

出現頻率:★★★★

解析:c是乙個結構化語言,它的重點在於演算法和資料結構。對語言本身而言,c是c++的子集。

c程式的設計首要考慮的是如何通過乙個過程,對輸入進行運算處理得到輸出。

對於c++,首要考慮的是如何構造乙個物件模型,讓這個模型能夠配合對應的問題,這樣就可以通過獲取物件的狀態資訊得到輸出或實現過程控制。

因此c與c++的最大區別在於它們的用於解決問題的思想方法不一樣。

c實現了c++中過程化控制及其它相關功能。而在c++中的c,相對於原來的c還有所加強,引入了過載、內聯函式、異常處理等等,c++更是拓展了物件導向設計的內容,如類、繼承、虛函式、模板和包容器類等等。

在c++中,不僅需要考慮資料封裝,還需要考慮物件粒度的選擇、物件介面的設計和繼承、組合與繼承的使用等等問題。

相對於c,c++包含了更豐富的設計的概念。

從c到c++

c++讀作「c加加」,是「c plus plus」的簡稱,c++是在c語言的基礎上增加新特性,從語法上看,c語言是c++ 的一部分,c語言**幾乎不用修改就能夠以 c++ 的方式編譯。

對於c和c++的關係,有很多種說法,從表面上看,很容易認為c++是c的公升級版,c++比c高大上,c過時了,有這種想法說明他不了解c/c++語言,我們先來看看世界程式語言排行榜,下表是2019的資料(過去十年的資料也大致如此)。

從上表中看出,這個世界上的c程式設計師比c++程式設計師多很多。

這麼多年了,我也搞不清楚自己是c程式設計師,還是c++程式設計師,好像沒什麼差別。

c++有很多新的特徵,這些新特徵並不一定實用,甚至很煩人。但是,c++的開發效率確實比c要高,所以我仍然採用斷章取義的方式來介紹c++的知識。不管是c還是c++,實用就好。

一、c++程式的命名規則

c++標頭檔案一般採用.h字尾,也用有.hpp的。

c++程式檔案一般採用.cpp字尾,也有用.cc的,建議採用.cpp,c++對程式檔案的命名沒有強制要求,採用.cpp為字尾是大部分程式設計師的習慣。

二、c++程式的編譯

在某些作業系統中,c和c++是同乙個編譯器,在centos中,c的編譯器是gcc,c++的編譯器是g++。

1、安裝g++編譯器

用root使用者登入伺服器,執行以下命令安裝或公升級gcc-c++編譯器。

yum  -y  install  gcc-c++

如果您的centos系統沒有安裝gcc-c++,以上命令就會安裝最新版本的gcc-c++,如果已經安裝了gcc-c++,就會更新到最新版本的gcc-c++,所以,以上命令不管執行多少次都沒有問題。

安裝gcc-c++的前提條件是伺服器必須可以訪問網際網路。

2、編譯c++程式

編譯c程式的命令是gcc,編譯c++程式的命令是g++,g++命令和gcc命令的用法相同,把gcc改為g++就可以了,我們在學習c語言時編寫的那些示例程式,基本上都可以用g++來編譯。

三、c++是物件導向語言

c語言是面向過程的程式語言,c++是物件導向的程式語言,很多人認為物件導向會比面向過程的方法更先進。仁者和智者的說法各有不同,大家慢慢體會,不能人云亦云。

c++的物件,確實可以大幅的提公升了c程式設計師的開發效率,降低程式設計師犯錯的機會。

四、c++輸入和輸出

在c語言中,我們使用scanf和printf來對資料進行輸入輸出操作。在c++語言中,增加了cin和cout輸入輸出,但是我從來不用它,因為它不實用,對格式化的支援實在是太麻煩。

printf實在太完美,太強大。

五、c++異常

c++增加了異常機制,但是,它從誕生開始就一直有爭議。

我沒有發現c++的異常有什麼實用價值,也從來沒有用過它。

六、c++命名空間和模板

了解一下命名空間和模板的概念和用法是可以的,會使用就行,但我不建議自定義命名空間和模板,沒必要把程式搞得那麼麻煩。

七、c++布林型別(bool)

c語言並沒有徹底從語法上支援「真」和「假」,只是用 0 和非 0來代表。這點在 c++中得到了改善,c++

新增了 bool 型別(布林型別),它占用 1 個位元組長度。bool 型別只有兩個取值,true和 false:true 表示「真」,false 表示「假」。

bool 是型別名字,也是 c++ 中的關鍵字,它的用法和 int、char、long是一樣的,可以用=賦值,可以用於函式的引數和返回值。

boolflag=true;// 定義bool型變數flag,賦值為trueif(flag)printf("flag is true");elseprintf("flag is fals");  flag=false;// 把flag賦值為falseif(flag)printf("flag is true");elseprintf("flag is fals");

八、c++定義變數的位置

ansi c規定,所有區域性變數都必須定義在函式開頭,在定義變數之前不能有其他的執行語句。c99標準取消這這條限制,但是某些編譯器對c99的支援很不積極,仍然要求變數定義在函式開頭,或者只支援一部分。

取消限制帶來的另外乙個好處是,可以在 for 迴圈的控制語句中定義變數。

inttotal=0;for(intii=1; ii<=100;ii++) 

這個很棒,程式更簡潔,更自由。

九、c++函式的預設引數

在c語言中,函式在宣告的時候指定了引數列表,呼叫的時候函式引數的個數、順序和資料型別必須與函式宣告引數列表相同,但是在c++中,宣告函式的時候,可以為函式指定預設引數,呼叫時預設引數可以不填寫。例如:

intwritetofile(file *fp,char*strbuf,boolenbuffer=true);// 指定引數enbuffer的預設值為true

enbuffer引數表示是否啟用緩衝區,writetofile函式被呼叫的時候,如果只寫fp和strbuf引數,不寫enbuffer引數,enbuffer引數將預設為true,例如:

writetofile(fp,strbuf);// 呼叫函式的時候,如果第三個引數enbuffer不填,就用預設值true

這個不錯,程式更簡潔。

十、c++動態記憶體管理

在c語言中,動態管理記憶體用 malloc() 函式,釋放記憶體用 free() 函式。

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

和c語言的動態記憶體管理一樣,c++動態記憶體管理的應用場景不多。

如果你對程式設計感興趣,想要深入學習。這裡分享素材包及學習資源,還有免費教程哦(包含c語言、

c++、

windows、qt

、linux

相關知識點)~不論是小白還是高階者,在這裡都能獲得成長。

點我進入學習基地

C C 有什麼不同 C和C 的區別

1.從機制上 c是面向過程的,但c也可以編寫物件導向的程式 c 是物件導向的,提供了類。但是,c 編寫物件導向的程式 以下簡稱oop 比c容易。2.從適用的方向 場景 高效 遊戲 金融 c適合要求 體積小的,效率搞的場合,如嵌入式 c 適合更上層的,複雜的 linux核心大部分是用c寫的,因為他是系...

C 面試 常用的16個cc 面試題

1.c中static有什麼作用 1 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性,故使用static在不同的檔案中定義同名函式和同名變數,而不必擔心命名衝突。2 static的第二個作用是保持變數內容的持久。儲存在靜態資料區的變數會在程式剛開始執行時就...

C 面試題之i 面試題

i 面試題1.cpp 中國台灣某著名防毒軟體公司2005年10月面試題 int i 3,j 4 i?i j printf d d n i,j a.3 3 b.4 4 c.3 4 d.4 3 答案b i 面試題2.cpp 中國某著名計算機金融軟公司2005年面試題 int x 1,j 2 int k ...