A. 請問c語言和C++區別大嗎
C與C++的區別:
1. C是一個結構化語言,它的重點在於演算法和數據結構。C程序的設計首要考慮的是 如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程 (事務)控制)。
2. 對於C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應 的問題域,這樣就可以通過獲取對象的狀態信息得到輸出或實現過程(事務)控 制。
所以C與C++的最大區別在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為「 設計這個概念已經被融入到C++之中 」,而就語言本身而言,在C中更多的是演算法的概念。那麼是不是C就不重要了,錯!演算法是程序設計的基礎,好的設計如果沒有好的演算法,一樣不行。而且,「C加上好的設計」也能寫出非常好的東西。
對語言本身而言,C是C++的子集,那麼是什麼樣的一個子集?從上文可以看出, C實現了C++中過程化控制及其它相關功能,而在C++中的C(我稱它為「C+」),相對於原來的C還有所加強,引入了重載、內聯函數、異常處理等等玩藝兒,C++更是拓展了面向對象設計的內容,如類、繼承、虛函數、模板和包容器類等等。
C++在歷史上曾經是C的擴展,不過現在兩個都各自有發展,所以現在的C++與現在的C沒有誰是誰的擴展的關系。
現在有人說C和C++是大熊貓和小熊貓的關系,也就是說只是名字相近——這多少有欠公允。不過C和C++的確是有巨大區別的,C語言簡單有效,但處理大問題就很麻煩像把左輪手槍;而C++則簡直是一輛坦克,功能齊備,但更肥大——無非都是兵器而已。至於說學習上C是C++的基礎,倒是一大誤區,槍械和火炮長得可能有點像,甚至也有點淵源,但終究全不是一回事。
先學C,後學C++有好處也有壞處,應該說至今仍有爭論。
我的看法是,如果是做應用軟體一類的編程,就不應該先學C,而且應該在初學時少接觸C的舊式編程風格,而是把大部分精力放在C++的標准庫(包括基於STL的編程,這方面國內一般的教材最欠缺),以及基於對象和面向對象的編程上。這是因為C++的這些應用從編程方式到代碼風格都與C語言大相徑庭,初學養成C式的編程習慣就很改掉,反而限制對類和泛型編程的理解。
如果是想接觸比較底層的東西,以後做軟體庫開發、系統編程之類,那麼學C語言,尤其是一些像宏、指針、內存管理等知識就很有好處(這些東西在前一種應用中卻都要盡量避免)。但先學C的好處並不明顯,因為直接學C++同樣可以學到這些東西,只要改變一點學習側重就可以了。
上面是從應用方向角度說的。至於學習的困難程度,直接學C++並不難,而且在一些方面更簡單一些;只不過C++的內容比C多罷了。C++的創始人Stroustrup就大力提倡不要學C,並列舉了先學C的種種壞處。因此我的意見也是不學C,直接學C++。
現在國內講C++的書一般是先講與C相似的一塊,後講C++獨有的內容,沒有融合在一起,看似C成了「基礎」。其實這種講法主要是由於國內編教材的教師多是學C語言(甚至機器碼、匯編)出身的,可能到很晚才接觸C++,因而有思維定勢。其實看國外許多教材,一入門就強調類的概念,入門不多久就大量用到STL,過程式的語法與這些一塊講,同樣也很直觀(對象的概念實際上比函數的概念直觀得多),可以學得通。
B. c語言和c++語言有什麼關系
c語言是1972年由美國貝爾實驗室研製成功的,在當時算是高級語言,但是隨著計算機性能的飛速提高,硬體配置與幾十年前已有天壤之別,軟體規模也不斷增大,很多軟體的體積都超過1G,例如PhotoShop、Visual
Studio等,用c語言開發這些軟體就顯得非常吃力了,這時候c++就應運而生了。
c語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點;c++是c語言的繼承,它既可以進行c語言的過程化程序設計,又可以進行以抽象數據類型為特點的基於對象的程序設計,還可以進行以繼承和多態為特點的面向對象的程序設計。
c++語言是在c語言的基礎上開發的一種通用編程語言,應用廣泛。c++支持多種編程範式:面向對象編程、泛型編程和過程化編程。最新正式標准c++14於2014年8月18日公布。其編程領域眾廣,常用於系統開發,引擎開發等應用領域,是至今為止最受廣大受用的最強大編程語言之一,支持類:類、封裝、重載等。c++主要用於大型的應用程序開發,比如游戲開發。
c++主要在c語言的基礎上增加了面向對象和泛型的機制,提高了開發效率,以適用於大中型軟體的編寫。
C. 純C語言實現,泛型數組(靜態數組的方式),關鍵是在分配內存時候,如何傳遞類型參數。(可惜我沒有分)
不要分,盡管討論!在32位機里指針都是4位元組。但為了書寫標准化和移植,還是用sizeof(ptype)*n作為malloc的參數為好。其中n是需要分配多少個ptype型指針的個數。
D. C語言 泛型動態數組
泛型動態數組
附上源碼: 泛型動態數組源碼
https://github.com/chenfanfang/data_structure
array.h 頭文件
array.c 函數實現
測試用例1
測試用例2
E. 怎樣在 C語言 實現 C#和C++裡面的 泛型 特性
用void *跟length參數來操作數據,達到泛型的目的!
F. 怎樣在 C語言 實現 C#和C++裡面的 泛型 特
何必呢,你要真用一個不支持泛型的語言來實現泛型其難度是難以想像的,有什麼特殊原因必須用C且必須用泛型么?
對於特定應用,泛型沒有什麼用。泛型主要用於寫通用庫的
G. c中泛型什麼時候替換
在c語言中方法被聲明時。
在c語言中如果方法被聲明也就是被定義時作為泛型類或者泛型介面的一部分,程序員就可以使用他們自己的泛型類型來替換原有的類型。
泛型的概念代表了對類型的抽象。它是一個非常強大的概念,它允許開發抽象演算法和數據結構,並提供實體類型以供後續操作。
H. C語言是什麼
C語言是國際上廣泛流行的,很有發展前途的計算機高級語言.它適合作為系統描述語言,即可用來編寫系統軟體,也可用來編寫應用軟體.
早期的操作系統等系統軟體主要是用匯編語言編寫的(包括 UNIX操作系統在內).由於匯編語言依賴於計算機硬體,程序的可讀性和可移植性都比較差.為了提高可讀性和可移植性,最好改用高級語言,但一般的高級語言難以實現匯編語言的某些功能(匯編語言可以直接對硬體進行操作),例如:對內存地址的操作,位操作等).人們設想能否找到一種既具有一般高級語言特性, 又具有低級語言特性的語言,集它們的優點於一身.於是,C語言就在這種情況下應運而生了.
C語言是在B語言的基礎上發展起來的,它的根源可以追溯到ALGOL 60. 1960年出現的ALGOL 60是一種面向問題的高級語言,它離硬體比較遠,不宜用來編寫系統程序.1963年英國的劍橋大學推出了CPL(CombinedProgram- ming Language)語言.CPL語言在ALGOL 60的基礎上接近了硬體一些,但規模比較大,難以實現.1967年英國劍橋大學的Matin Richards對 CPL語言作了簡化,推出了BCPL(Basic Combined Programming Language)語言.1970年美國貝爾實驗室的 Ken Thompson以 BCPL語言為基礎,又作了進一步簡化,設計出了很簡單的而且很接近硬體的 B語言( 取 BCPL的第一個字母),並用 B語言寫第一個UNIX操作系統,在PDP-7上實現. 1971年在PDP-11/20上實現了B語言,並寫了UNIX操作系統.但B語言過於簡單,功能有限.1972年至 1973年間,貝爾實驗室的 D.M.Ritchie在B語言的基礎上設計出了C語言(取 BCPL的第二個字母).C語言既保持了BCPL和B語言的優點(精練,接近硬體),又克服了它們的缺點(過於簡單,數據無類型等). 最初的C語言只是為描述和實現UNIX操作系統提供一種工作語言而設計的.1973年,K.Thom- pson和D.M.ritchie兩人合作把UNIX的90%以上用 C改寫(UNIX第5版.原來的 UNIX操作系統是1969年由美國的貝爾實驗室的 K.Thompson和D.M.Ritchie開發成功的,是用匯編語言寫的).
後來,C語言多次作了改進,但主要還是在貝爾實驗室內部使用.直到1- 975年UNIX第6版公布後 ,C語言的突出優點才引起人們普遍注意.1977年出現了不依賴於具體機器的C語言編譯文本《可移植C語言編譯程序》,使C移植到其它機器時所做的工作大大簡化了,這也推動了UNIX操作系統迅速地在各種機器上實現.例如,VAX,AT&T等計算機系統都相繼開發了UNIX.隨著 UNIX的日益廣泛使用,C語言也迅速得到推廣.C語言和UNIX可以說是一對孿生兄弟,在發展過程中相輔相成.1978年以後,C語言已先後移植到大, 中,小,微型機上,已獨立於UNIX和PDP了.現在C語言已風靡全世界,成為世界上應用最廣泛的幾種計算機語言之一.
以1978年發表的UNIX第7版中的C編譯程序為基礎,Brian W.Kernighan和 Dennis M.Ritchie(合稱K&R)合著了影響深遠了名著《The C Programming Lan- guage》,這本書中介紹的C語言成為後來廣泛使用的C語言版本的基礎,它被稱為標准C.1983年,美國國家標准化協會(ANSI)根據C語言問世以來各種版本對C的發展和擴充 ,制定了新的標准,稱為ANSI C.ANSI C比原來的標准C有了很大的發展.K&R在1988年修改了他們的經典著作《The C Progra- mming Language》 ,按照ANSI C的標准重新寫了該書.1987年,ANSI C又公布了新標准--87 ANSI C .目前流行的C編譯系統都是以它為基礎的.
I. 為什麼說C語言是結構化的語言
雖然從嚴格的學術觀點上看,C語言是塊結構(b l o c k - s t r u c t u r e d)語言,但是它還是常被稱為結構化語言。這是因為它在結構上類似於A L G O L、P a s c a l和M o d u l a - 2(從技術上講,塊結構語言允許在過程和函數中定義過程或函數。用這種方法,全局和局部的概念可以通過「作用域」規則加以擴展,「作用域」管理變數和過程的「可見性」。因為C語言不允許在函數中定義函數,所以不能稱之為通常意義上的塊結構語言)。
結構化語言的顯著特徵是代碼和數據的分離。這種語言能夠把執行某個特殊任務的指令和數據從程序的其餘部分分離出去、隱藏起來。獲得隔離的一個方法是調用使用局部(臨時)變數的子程序。通過使用局部變數,我們能夠寫出對程序其它部分沒有副作用的子程序。這使得編寫共享代碼段的程序變得十分簡單。如果開發了一些分離很好的函數,在引用時我們僅需要知道函數做什麼,不必知道它如何做。切記:過度使用全局變數(可以被全部程序訪問的變數)會由於意外的副作用而在程序中引入錯誤。
結構化語言比非結構化語言更易於程序設計,用結構化語言編寫的程序的清晰性使得它們更易於維護。這已是人們普遍接受的觀點了。C語言的主要結構成分是函數C的獨立子程序。
在C語言中,函數是一種構件(程序塊),是完成程序功能的基本構件。函數允許一個程序的諸任務被分別定義和編碼,使程序模塊化。可以確信,一個好的函數不僅能正確工作且不會對程序的其它部分產生副作用。
J. 詳解Java和C語言的區別在哪裡
1Java與C語言各自的優勢
C語言是面向過程的語言,執行效率高;Java是面向對象的語言,執行效率比C語言低。
C語言最關鍵的是比Java多了指針,這也說明了Java的健壯性,還有Java的多線程機制使程序可以並行運行,Java程序多用於網路。
C語言的安全性不如Java,C語言沒有Java的垃圾回收機制,申請的空間要手動釋放。
Java的通用性好,可以跨平台直接移植,只要有安裝Java虛擬機(JVM)就可以了。
2Java和C語言誰的通用性會比較好
在速度上,C語言編寫的程序要優於Java,因為Java必須運行在虛擬機的環境中,但是因為虛擬機,Java獲得的平台無關性,而C語言的程序有可能需要重新修改編譯才能實現平台的移植,
另一方面,C語言比Java語言更「底層」,因此可以用C編寫例如硬體的驅動,而Java卻不行。Java和C語言還有個明顯的不同就是C語言注重的是演算法,但是Java卻不一樣,想用的時候導包就可以了。
C語言的演算法很重要,但是Java中的演算法沒有C語言那麼復雜。列印的方法:C語言是printf("??.");而Java是System.out.print("??."),也可以用println,ln表示換行。
Java程序中的基本數據類型(boolean,char,byte,short,int,long,float,double),是對對象的引用;C語言也有許多種基本類型,還有struct,union,enum,數組和指針。
在Java沒有枚舉、聯合類型。Java採用Unicode字元集,C語言通常採用的是ASCII字元集,A—65,a—97。C語言的變數可以不進行初始化,但Java的變數要進行初始化。
在C語言中,char類型佔一個位元組,在Java中char類型佔2個位元組。
3Java和C語言各自的特徵
Java面向對象的特徵主要有封裝,繼承,多態。類的繼承關系是單一的、非多重的,一個子類只有一個父類,子類的父類又只有一個父類。C語言支持「運算符的重載」,這是它的一個很重要的多態特徵,是數據抽象和泛型編程的利器。它允許直接對對象進行四則運算,正像基本數據類型那樣Java不支持這種多態機制,也是為降低復雜性。
Java可以支持方法重載和重寫,所謂重載就是一個類具備多個相同屬性行為;重寫就是在繼承關系中父類的行為在不同的子類上有不同的實現。在Java中比C語言多了一些修飾符,如訪問修飾符Public(公共的)、Private(私有的)、Protected(受保護的)、默認。
Java有super關鍵字,指代父類對象,通常被用於調用父類的構造方法或一般方法C語言則沒有super關鍵字,兩者都有this,指代當前對象。
在Java中,除了static、final、private是靜態綁定以外,所有方法一律按動態綁定處理。Java中可以將類組織起來用Package打包,而C語言沒有。