前言:本想直接寫個關於OC語言,但覺得還是要說下C先。
先語言特性
C是面向過程的,沒有類和對象概念,也就沒有什么封裝(這個?)、繼承、多態等特性。
而且是是中級語言,其編譯過程包括:預編譯(include,宏,條件編譯等)、編譯成匯編、連接。
再語言屬性
1.數據類型,這個N多了,多到很適合編寫數據庫
2.條件控制,這個和其他語言基本相同
3.運算符,這個基本也和其他語言一樣
(其中位運算:~取反,&並,!或,^亦或[不同時為真],<<左移,>>右移)
4.(一維)數組、字符串,數組初始化地址連續,數組(名)即代表首地址,字符串即字符數組后加‘\0’組成
5.指針,被譽為C中最難的語法,這個其實就是個地址。
A.指向指針的指針,其實只是指針指向的類型就是指針而已。暈,還是有點繞!
B.數組與指針,這個有點變態,就是數組(名)可以和(指向)指針有幾乎一樣的效果
(只是幾乎一樣,但也有點區別,如字符串賦值給數組和指針是不同的!一變量以常量)
C.指向函數指針,這個就像C#里面的委托,即方法的指針,或叫函數首地址、入口地址怎樣都行
D.void類型指針,這個也說下,是代表指向不確定類型,也就是可以指向任何類型
6.結構體&共同體,結構體為了融合數組只能是同意類型而生出的不同類型,而共同體和結構體類似,只是公用一塊存儲地址
7.枚舉&typeof,就說下typeof,其作用就是定義簡化某一類型或函數
8.訪問指針對象成員(查看C++是想起的,真是要比較才知~),即->,而.是訪問普通&指針成員變量的
其它好像就沒有什么的,其實C也不是很神奇的(當然也要有些基礎的)。暈好像漏了個函數&變量,這個到也有點東西,里面牽涉一點概念,
首先,堆棧(存數據):棧,是連續存放的系統自動管理的少量空間,一般存儲函數的參數值,局部變量;堆,和棧相反,一般程序員申請等。
補充下,文字常量區,存放字符串常量等, 程序結束后由系統釋放;程序代碼區,存放函數體的二進制代碼。
再者,動靜態存儲區:動態者用完就沒了,如函數內部變量;靜態則(程序結束前)一直還在,全局變量、static定義內外部變量,調用完還在;
(這里又牽涉到C的面向過程的特點就是作用范圍,外部變量的默認作用范圍是從開始聲明到本文件結束,內部就不說了。
extern聲明可以使別的文件也可訪問,默認;static聲明就只能自身訪問)
最后,內外不函數:前面和內外部變量類似,不過由於c有頭文件,所以一般私有方法只要不在h文件定義就是了。
好像還有一些冷門的設計寄存器(即cpu)啊---有點牽涉底層嵌入式開發,還有些怪異的函數什么的就沒必要多說了。。
其實C里面還是有不少細節的東西,如前面static的內部變量使用的效果就又是有點奇葩的,還有內連函數(C++?)等等。
雖然C++小的了解不深,但OC中可能混有相關代碼,java的JNI/NDK等都可能用到,
這里隨便補充一些(簡單翻下資料歸納的)C與C++的區別吧
首先意念上,C重算法數據結構,面向過程,C++半面向對象,重對象模型封裝控制。。
再就是語法上(主要是C++比C多出的)
1.輸入輸出,cout<< & cin>>,對c的printf&scanf
2.引用別名&,類型 & 新變量=就變量,只能初始化定義一次
3.內聯函數,編譯是替換
4.重載方法(同一文件內)&默認參數
5.作用域運算符::,這個只能用於訪問(定義)外部變量或函數用的
6.運算符重載,這個和C#類似
7.new&delete,開辟(實例化)&撤銷內存,對應c中malloc&free,這個應該知道就ok了
8.輸入輸出&文件操作函數,這個我也沒去細看,要用時再查看下調用方式就行
9.面向對象,
A.多繼承&繼承訪問修飾(這個讓我有點頭疼的!)
B.構造&析構函數,這個和C#差不多
C.操作修飾符,要this,public等類似C#的修飾,而沒有extern等
D.friend友元(函數),類中聲明內外定義,方便調用訪問內部變量
E.虛函數&抽象類,還有=0的純虛函數,類似C#抽象方法
10.template模版,有點類似C#的泛型,分函數模版&類模版,STL標准模版庫(里面有類似C#的集合類型模版),
11.MFC,說了STL好像也有說下MFC基礎類庫,即VC++提供大部分封裝好的類。還有個句柄,就是winfrom唯一標識、指針
上面是主要區別,其他就沒多少不同了(或者說也和C#基本語法沒太多區別了)。還有一些很少用的怪異運算符之類,不過看到代碼也能估計出大致意思。
最后一點不同就是VC++圖形界面開發、控件使用的不同了。
以上是C/C++語言的整體脈絡,大概基本就是這樣了的。其實,如果程序是=數據+算法,那我都有點覺得編程=語言+工具+思想。
最后就是,C語言只是一門編程語言,更應該說是一門編程思想(大學時怎么領會到?),學好了就如學會了九陽神功!好逼格,呵呵~
PS,下次不定時歸納下前端優化、后端分布式並發處理等,還是OC語言(JAVA&C#只應談架構體系),IOS開發涉及有點概念&相關知識點,
或者常見網絡安全的攻擊&預防方式&加密方式&SSL握手。。。有點多、有點亂。
由於近期還在找(適合)工作,還是待工作后再待續。。。