C語(yǔ)言是面向過程的,而C++是面向?qū)ο蟮?/b>
C和C++的區(qū)別:
C是一個(gè)結(jié)構(gòu)化語(yǔ)言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)。
C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問題域,這樣就可以通過獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”。
C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”,而就語(yǔ)言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯(cuò)!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒有好的算法,一樣不行。而且,“C加上好的設(shè)計(jì)”也能寫出非常好的東西。

我們知道 , Android系統(tǒng)是基于linux開發(fā) , 采用的是linux內(nèi)核 , Android APP開發(fā)大部分也要和系統(tǒng)打交道 , 只是Android FrameWork 幫我們屏蔽了系統(tǒng)操作 , 我們從Android 系統(tǒng)的分成結(jié)構(gòu)可以看出 , Android FrameWork是通過JNI與底層的C/C++庫(kù)交互 , 例如:FreeType ,OpenGL ,SQLite , 音視頻等等 。

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
Android_Framework.png
做Android為什么需要學(xué)習(xí)C/C++ ?
1. 企業(yè)需要 , 現(xiàn)在大部分招聘 , 基本上都會(huì)要求會(huì)JNI2. 進(jìn)階需要 , 如果想要研究Android源碼 , 那么不會(huì)C/C++ , 行不通3. 音視頻時(shí)代到來(lái) (直播) , 音視頻處理 , 很大部分都需要C/C++完成(音視頻編解碼)
那么下面就一起開始學(xué)習(xí)C吧 ! let's go
C語(yǔ)言中的變量
編寫C的時(shí)候 , 首先我們需要引入頭文件 , 就像我們寫JAVA的時(shí)候 , 需要引入包一樣 , 但C語(yǔ)言他不會(huì)幫你自動(dòng)引入 , 所有頭文件 , 必須你自己手動(dòng)引入, 最常用的兩個(gè)頭文件是
#include
C語(yǔ)言中的xxx.h的頭文件 , 里面只有函數(shù)聲明 , 沒有函數(shù)實(shí)現(xiàn) , 函數(shù)實(shí)現(xiàn)都在xxx.c里面 。
在學(xué)習(xí)一門語(yǔ)言的時(shí)候 , 我們最先了解的就是變量 , 變量的定義 , 變量所占大小 , 下面我們看看C語(yǔ)言中的變量類型 , 和變量大小 。 和JAVA不同的是 , C語(yǔ)言變量的大小 , 是隨著操作系統(tǒng)變化而變化的 , 不同的操作系統(tǒng) , 變量的大小可能不一樣 。
下面我們來(lái)查看C語(yǔ)言的變量類型和變量類型的大?。?/p>
void main() { int i = 90; printf("int 所占字節(jié):%d ", sizeof(int)); printf(" i 的值:%d ", i); short sh = 32; printf("short 所占字節(jié)數(shù):%d ", sizeof(short)); printf("sh 的值:%d ", sh); long l = 12312; printf("long 所占字節(jié)數(shù):%d ", sizeof(long)); printf("l 的值:%ld ", l); float f = 12.3; printf("float 所占字節(jié)數(shù):%d ", sizeof(float)); printf("f 的值:%f ", f); double d = 234.345; printf("double 所占字節(jié)數(shù):%d ", sizeof(double)); printf("d 的值:%lf ", d); char c = 'c'; printf("char 所占字節(jié)數(shù):%d ", sizeof(char)); printf("c 的值:%c ", c); // 輸出字符串
在使用
printf()
函數(shù)的時(shí)候 , 需要標(biāo)明輸出數(shù)據(jù)的類型 , 例如:
int
類型是
%d
,
char
類型是
%c
,
表示換行 等等:
/*

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
C語(yǔ)言中的指針
C語(yǔ)言中最重要的 , 就是指針了 , 沒有指針 , 就沒有高級(jí)語(yǔ)言的那些強(qiáng)大的特性 , 說(shuō)到指針我們就會(huì)想到內(nèi)存操作 , 指針就是為了操作內(nèi)存而生 。
下面我們來(lái)看看 , 指針的簡(jiǎn)單使用:
// 定義一個(gè)變量i , i的值是100
指針存儲(chǔ)的是變量的內(nèi)存地址 , 也只能存儲(chǔ)內(nèi)存地址 , 直接賦值整數(shù)值也會(huì)被轉(zhuǎn)化成內(nèi)存地址
下面我們來(lái)看一個(gè)完整的例子:
void main() { // 定義一個(gè)變量i , i的值是100
如果使用的是Visual Studio開發(fā)工具 , 可以在在代碼中打一個(gè)斷點(diǎn),在菜單欄
調(diào)試->窗口->內(nèi)存->內(nèi)存1
, 將打印出的變量地址值 , 在輸入欄中填入 , 按回車鍵進(jìn)行地址搜索 。如果是一堆問號(hào)或者亂碼 , 則在該窗口點(diǎn)擊右鍵 ,在右鍵菜單中, 選擇按照你打印的變量的進(jìn)制位顯示 , 例如int 就按4進(jìn)制位顯示 , 再在右鍵菜單欄中找到帶符號(hào)顯示 , 基本上就能看到變量的值了 。
上述的例子中 , 如果我們想修改i的值 , 除了給i直接賦值外 , 還可以通過指針來(lái)操作,如下:
定義一個(gè)變量i , i的值是100
指針也是一個(gè)變量 , 如上
int* p = &i
, p就是一個(gè)指針變量 , 這個(gè)變量存儲(chǔ)的就是i變量的內(nèi)存地址 , 通過
printf("p的值:%#x ",p) printf("i的地址:%#x ",&i)
, 我們可以打印出指針變量p的值和i變量地址 , 可以看到兩個(gè)值是一致的 。 那么指針和普通變量有什么區(qū)別呢 ? 指針變量的強(qiáng)大之處就在于 , 他能通過內(nèi)存地址去操作對(duì)應(yīng)內(nèi)存地址的內(nèi)容 。上述例子中
*p = 20

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
, 就是操作i變量的地址 , 將i變量中的100修改為20 。
我們了解了指針的概念和基本使用 , 下次我們就要了解 , 二級(jí)指針 , 多級(jí)指針 , 函數(shù)指針 等等 , 由此 , 我們可以看出 , C語(yǔ)言的世界, 就是一個(gè)指針的世界 , 就如同JAVA的世界 , 就是一個(gè)對(duì)象的世界一樣 , 兩者都是其各自的核心 , 所以我們一定要把指針弄懂 , 學(xué)透 。


