C語言和C++的基礎知識區別大嗎?

如題。


兩門相似卻完全不同的語言,學任何其中一個都要忘記另一個。


哎,稍微回答一下吧。

C++是從C裡面發展出來的。所以它們的最小集裡面,確實是有重疊部分,那一部分都是一樣的。但是!!這兩門語言是完全不一樣的語言。如果題主想學習的話,別認為說學了C++就會C,或者會了C學C++就很容易。

如果題主有C語言的基礎而且對C++有興趣的話,可以去看C++他爹寫的《C++的設計與演化》,還有Lippman的《深入探索C++對象模型》。這兩本書都是一步一步地交代C++是怎麼在C語言的基礎上演化,而且在演化的過程中遇到了什麼樣的問題,以及對應提供的妥協方案。C++在添加特性的時候,大部分都會遇到在C語言裡面不存在的問題。所以在C裡面很安全的寫法到了C++就帶來一堆陷阱。

----------------------------------------原回答--------------------------------------------------

基礎區別不大,抽象區別很大。如果想考慮學習的話,兩門都需要單獨去學習。


學了C可以直接寫C++。畢竟C幾乎是C++子集。

但如果要說區別的話,區別還是大的,畢竟面向對象可以看作是C++的基礎知識之一,模板也可以。

簡單來說,C++可以是像C一樣簡單(並沒有規定不能按C的樣子去寫),也可以是各種黑魔法很複雜。

另外我實在想不通這種問題有什麼意義。


大熊貓和小熊貓的區別大嗎?


完全不是一回事,歷史原因造成的,c++是建立在c基礎上,但後來的發展基本就是c++在告訴你,它是一門全新的語言,c有c的基礎知識,c++也有它的基礎知識。


你永遠不知道所謂c++基礎知識是什麼意思


你可以換個角度來讓問題變的有意思:我們從C這樣離彙編沒隔幾層的語言出發,怎麼把各種流行的表達範式都實現一遍,實現出來這些語言特徵影響的是編譯時還是運行時?如果你想不出來就看看 DE C++ 或者加上inside C++ object model。當然經典C++哲學對一些技術的態度有局限性,比如GC,對一些新的編譯技術進步也有點遲鈍,對此要有所鑒別


基礎知識?

所有語言的基礎知識都差不多。

語言特性才有區別。



當初老師說的是C語言,但是卻是C++里跟C語言在語法上重合的部分。後來正兒八經的學了C之後也一直以為只是某些函數不一樣(當時我根本不知道cout是個什麼,後來自己寫輸入輸出流對象之後才知道),然後又認真學了C++之後才明白,原來C語言和C++看似有重合的部分,然而重合的部分在底層也不完全一樣(紀念當初沒有extern "C"時走過的坑),更大不同的地方是範式不同,而且慢慢看習慣C++的代碼後反而覺得C語言的代碼看起來難受(是的模板有時候還挺好看的)。


以前我出過個面試題,如果C是1,請問C++是

A. 1,B. 2,C. 10,D. 100

答案是A。

int C=1;

int D=C++;

printf(」%d
", D);

大家發現沒?C變成C++以後,除了多付出兩個加號,其實沒啥收穫,哈哈,不自覺地又黑了C++一把。


直接看書(摘自&<&&>第三版,條款1:視C++為一個語言聯邦):


除了理念、範式、對奇技淫巧的渴望、對編譯器的期待等等完全不同類別的區別以外,即使他們相交的部分其實也有些許差別,我來說說具體的幾個比較典型的,就C99 vs C++98而言,很多老規範後面的版本也沒變(之所以不是C98是為了少一個C98必須在函數體開頭聲明所有局部變數的區別):

  • C++里全局變數前面加上const,linkage就默認為static;所以對於C++而言,非const的全局變數linkage是extern,const全局變數是static;對C而言,全局變數總是默認是extern;
  • C中可以先使用一個函數後面才定義,這樣在首先編譯器會自動生成一個聲明,默認為int返回類型;如果你的函數定義不返回int,就有一個隱式的函數類型轉換;而C++不允許未聲明先調用;
  • C中void*可以隱式轉換為其他類型的指針譬如int*;C++中不行,必須cast;
  • C中如果不用typedef,聲明struct類型前面要加上struct,而C++中不用加;由於C++的其他語言特性導致的struct的其他區別這裡不論

其實你自己去用C++寫一個簡單的C語言編譯器前端,這些語法上的小差別就都體會到了。


最近一個月一直在看c++primer plus,沒錯是plus, 。有很多心得體會,寫下來與大家一起進步吧。主要寫給剛進入c++之旅的人,已經入門的可以無視我這篇文章。

1.c++與c最主要方面是編程思維的不同,c主要在於過程,什麼意思呢?我個人認為就是重點放在編寫,設計函數上,然後再將函數按照你想實現的目標一步步調用。c++的重點是放在編寫和設計類上。那麼問題來了,什麼是類?簡單點說類是一種由我們自己設計的數據類型,也就是說你可以把類當作像int,double類型外一種新的類型。類裡面包含了基本數據類型外,更恐怖的是,它還包含了函數 。

2.學c++要不要學c?個人覺得有必要學,因為畢竟稱c++為c的超集。c裡面的指針,內存在c++裡面還要經常接觸,而且很多講c++的書籍都會用來和c作比較。比如輸入在c裡面怎麼實現,而c++裡面怎麼換成流對象cin了,這什麼鬼?而且怎麼這個啥數據類型都能輸入?如果不接觸c很多概念對新手來說不好理解。為什麼學c,我後面還會細說。

3.學c學到什麼程度就好了?不要求很厲害,我自己認為如果能夠以鏈表的形式寫一個像成績管理系統一樣簡單的在dos下運行的就行。只要能簡單的插鏈表,刪鏈表,查找鏈表,那麼c基本過關了,可以學c++了。

以下寫給剛學完c想學c++的人,我也總結下我學c++的經驗吧,希望能給剛入手學習的人一些方向,我自己也能整理整理自己的學習感悟。

1.不推薦一上來就看經典入門巨著,c++primer和c++primer plus,主要我覺得這兩本書太厚,可能你還沒看到一半,就已經看不下去了。我手邊有一本plus第六版(人民郵電出版,還是盜版,←_←,←_←),整本書共936頁,如果不算附錄,共838頁,忽略第十八章,探討c++新標準,共794頁。光看這些頁碼,我相信你想靠這幾本書入門的話,已經頭大了。這兩本書經典嗎?非常經典。這兩本書一定要看嗎?必須看,如果想學好的話(其實這兩本只耐心看完一本也就夠了,另一本沒事翻翻就行)。

2.可以隨便找一本比較薄的c++書籍來看,越薄越好,不推薦很厚的,我當時看的一本寫的很略的一本自己學校編的教程,具體啥書就不說了。一般前幾章都是回顧c,很多人一上來看見c語言,覺得比較熟悉,馬上跳過,直奔c++核心,對象和類。(我自己以前就這樣)不過我覺得在函數那塊一定要停一停,學會一種新的引用變數,非常重要,非常重要非常重要^ω^!

3.又要回到c了,其實我個人認為,學好了c++的函數(不是c),基本上類的知識就學了一半。而學c++的函數學好的前提又是c的函數過關(看來還是得先學c,繞不過去)。為什麼?c++的函數比c而言,擴充了很多。首先能夠重載,其次有默認參數, ,然後增加引用,增加引用帶來的後果是(⊙o⊙)啥?引用作為形參時,居然可以像指針一樣,修改實參,眾所周知,傳值調用是無法改變實參的。太恐怖了(你tm在逗我?)細說一下吧,看不下去這段的可以直接跳過,與後文無關聯。上一個大殺器!看一個函數原型申明friend ostream operator&<&< (ostream , const Complex);(其中Complex是我自己定義的一個類)。函數沒學好的人,求看到這個原型的心理陰影面積。這個函數我覺得非常實用,也很華麗,相必這也是設計這門語言的人之所以重載運算符的原因吧。這個函數涉及到4個基本知識: a引用做為形參;b引用作為返回對象;c操作符重載;d友元函數。重載函數其實非常簡單,只要函數名一樣,參數類型不同就行。編譯器會自動識別。具體實現原理不多說。(當然這個對於新手來說還是比較難理解,但是對於c++學得挺好的人當然很easy,我寫這篇文章只針對c++初學者)

4.當你把函數學得差不多時,就可以學類了。因為類也只是幾個基本數據類型加上一堆函數堆砌而成。類就是一個新的數據類型,有數據類型,但沒對象啊。新手可能又會糊了,對象和類到底是個啥東東。

class A{}; A a;int b;

最簡單的類比,A就是類,a就是對象。這好比A對應著int;a對應著b;炒雞好理解。這也是為什麼我一直說類就是自己定義的新的數據類型的意思。

5好了,當你學完一本薄薄的書後,編了一些小程序,覺得自己學得差不多了,覺得自己牛逼哄哄的時候,你需要看前面兩本大磚頭中的任意一本了,這時,你會發現在被這本磚頭砸了你大腦後,你將會對c++產生新的認識。

當然學無止境,這個也只是針對c++入門的人。c++知識太多太雜,要投入一定時間才能學有所獲。

本人原創文章

2017年3月27號


C面向過程,注重指針和內存的勾心鬥角;C++面向對象,注重對象和演算法的絞盡腦汁。

C++兼容運行C代碼,所以C++基礎基本包括了C基礎部分,部分關鍵字、語法運用上稍有不同。

回答你的問題,區別不大,但需要注意側重點和思維方式的不同。


謝邀。

主要的區別還在面向對象上面。

你要理解面向對象是一種什麼樣的思想。

就是一切要以對象為中心。

你不理對象,對象也不理你。

把對象好好封裝一下,這樣她才能給你產生子類

當然考慮到對象的易變,你也要做好多態的準備

…………

你有對象嗎?


C是刺客的利器,C++是聖殿的武裝。


語法基本上都是一樣的


有對象和沒有對象的區別大嗎?


何必再糾結,一起學了吧!學習C語言c++關鍵是要努力!關注「C語言Plus」來學習吧!


推薦閱讀:

為什麼這段 c++ 代碼需要加這對括弧才正確運行,是編譯器問題嗎?

TAG:C編程語言 | C | C# | CC | VisualC |