C語言是面向過程的意系,而C++是面向?qū)ο蟮? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C和C++的區(qū)別:
C是一個結(jié)構(gòu)化語言染厅,它的重點在于算法和數(shù)據(jù)結(jié)構(gòu)社裆。C程序的設(shè)計首要考慮的是如何通過一個過程耳贬,對輸入(或環(huán)境條件)進行運算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)政供。
C++,首要考慮的是如何構(gòu)造一個對象模型尽狠,讓這個模型能夠契合與之對應(yīng)的問題域蚕礼,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣席舍。之所以說C++比C更先進布轿,是因為“ 設(shè)計這個概念已經(jīng)被融入到C++之中 ”。
C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣来颤。之所以說C++比C更先進汰扭,是因為“ 設(shè)計這個概念已經(jīng)被融入到C++之中 ”,而就語言本身而言脚曾,在C中更多的是算法的概念东且。那么是不是C就不重要了,錯本讥!算法是程序設(shè)計的基礎(chǔ),好的設(shè)計如果沒有好的算法鲁冯,一樣不行拷沸。而且,“C加上好的設(shè)計”也能寫出非常好的東西薯演。
小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 六九九撞芍,四七零,五九六 】跨扮,無論你是大牛還是小白序无,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具衡创,很多干貨和技術(shù)資料分享帝嗡!
C/C++中的引用與指針的區(qū)別
指向不同類型的指針的區(qū)別在于指針類型可以知道編譯器解釋某個特定地址(指針指向的地址)中的內(nèi)存內(nèi)容及大小,而void*指針則只表示一個內(nèi)存地址璃氢,編譯器不能通過該指針所指向?qū)ο蟮念愋秃痛笮∮寸瑁虼讼胍ㄟ^void*指針操作對象必須進行類型轉(zhuǎn)化。
★ 相同點:
1. 都是地址的概念一也;
指針指向一塊內(nèi)存巢寡,它的內(nèi)容是所指內(nèi)存的地址;
引用是某塊內(nèi)存的別名椰苟。
★ 區(qū)別:
1. 指針是一個實體抑月,而引用僅是個別名;
2. 引用使用時無需解引用(*)舆蝴,指針需要解引用谦絮;
3. 引用只能在定義時被初始化一次菱皆,之后不可變;指針可變挨稿;
引用“從一而終” ^_^
4. 引用沒有 const仇轻,指針有 const,const 的指針不可變奶甘;
5. 引用不能為空篷店,指針可以為空;
6. “sizeof 引用”得到的是所指向的變量(對象)的大小臭家,而“sizeof 指針”得到的是指針本身(所指向的變量或?qū)ο蟮牡刂罚┑拇笮疲陕。?/p>
typeid(T) == typeid(T&) 恒為真,sizeof(T) == sizeof(T&) 恒為真钉赁,但是當引用作為類成員名稱時蹄殃,其占用空間與指針相同4個字節(jié)(沒找到標準的規(guī)定)。
7. 指針和引用的自增(++)運算意義不一樣你踩;
★ 聯(lián)系
1. 引用在語言內(nèi)部用指針實現(xiàn)(如何實現(xiàn)诅岩?)。
2. 對一般應(yīng)用而言带膜,把引用理解為指針吩谦,不會犯嚴重語義錯誤。引用是操作受限了的指針(僅容許取內(nèi)容操作)膝藕。
引用是C++中的概念式廷,初學(xué)者容易把引用和指針混淆一起。一下程序中芭挽,n 是m 的一個引用(reference)滑废,m 是被引用物(referent)。
int m袜爪;
int &n = m蠕趁;
n 相當于m 的別名(綽號),對n 的任何操作就是對m 的操作饿敲。例如有人名叫王小毛妻导,他的綽號是“三毛”。說“三毛”怎么怎么的怀各,其實就是對王小毛說三道四倔韭。所以n 既不是m 的拷貝,也不是指向m 的指針瓢对,其實n 就是m 它自己寿酌。
引用的一些規(guī)則如下:
(1)引用被創(chuàng)建的同時必須被初始化(指針則可以在任何時候被初始化)。
(2)不能有NULL 引用硕蛹,引用必須與合法的存儲單元關(guān)聯(lián)(指針則可以是NULL)醇疼。
(3)一旦引用被初始化硕并,就不能改變引用的關(guān)系(指針則可以隨時改變所指的對象)。
以下示例程序中秧荆,k 被初始化為i 的引用倔毙。語句k = j 并不能將k 修改成為j 的引用,只是把k 的值改變成為6.由于k 是i 的引用乙濒,所以i 的值也變成了6.
int i = 5陕赃;
int j = 6;
int &k = i颁股;
k = j么库; // k 和i 的值都變成了6;
上面的程序看起來象在玩文字游戲甘有,沒有體現(xiàn)出引用的價值诉儒。引用的主要功能是傳遞函數(shù)的參數(shù)和返回值。C++語言中亏掀,函數(shù)的參數(shù)和返回值的傳遞方式有三種:值傳遞忱反、指針傳遞和引用傳遞。
小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 六九九幌氮,四七零缭受,五九六 】,無論你是大牛還是小白该互,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具韭畸,很多干貨和技術(shù)資料分享宇智!
1)以下是“值傳遞”的示例程序。由于Func1 函數(shù)體內(nèi)的x 是外部變量n 的一份拷貝胰丁,改變x 的值不會影響n随橘, 所以n 的值仍然是0.
void Func1(int x)
{
x = x + 10;
}
int n = 0;
Func1(n);
cout << “n = ” << n << endl;// n = 0
2)以下是“指針傳遞”的示例程序。由于Func2 函數(shù)體內(nèi)的x 是指向外部變量n 的指針锦庸,改變該指針的內(nèi)容將導(dǎo)致n 的值改變机蔗,所以n 的值成為10.
void Func2(int *x)
{
(* x) = (* x) + 10;
}
?
int n = 0;
Func2(&n);
cout << “n = ” << n << endl; // n = 10
3)以下是“引用傳遞”的示例程序。由于Func3 函數(shù)體內(nèi)的x 是外部變量n 的引用甘萧,x和n 是同一個東西萝嘁,改變x 等于改變n,所以n 的值成為10.
void Func3(int &x)
{
x = x + 10;
}
?
int n = 0;
Func3(n);
cout << “n = ” << n << endl; // n = 10
對比上述三個示例程序扬卷,會發(fā)現(xiàn)“引用傳遞”的性質(zhì)象“指針傳遞”牙言,而書寫方式象“值傳遞”。實際上“引用”可以做的任何事情“指針”也都能夠做怪得,為什么還要“引用”這東西咱枉?
答案是“用適當?shù)墓ぞ咦銮∪缙浞值墓ぷ鳌薄?/p>
指針能夠毫無約束地操作內(nèi)存中的如何東西卑硫,盡管指針功能強大,但是非常危險蚕断。
就象一把刀欢伏,它可以用來砍樹、裁紙亿乳、修指甲硝拧、理發(fā)等等,誰敢這樣用风皿?
小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 六九九河爹,四七零,五九六 】桐款,無論你是大牛還是小白咸这,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具魔眨,很多干貨和技術(shù)資料分享媳维!
如果的確只需要借用一下某個對象的“別名”,那么就用“引用”遏暴,而不要用“指針”侄刽,以免發(fā)生意外。比如說朋凉,某人需要一份證明州丹,本來在文件上蓋上公章的印子就行了,如果把取公章的鑰匙交給他杂彭,那么他就獲得了不該有的權(quán)利墓毒。
這些是C/C++能做的
服務(wù)器開發(fā)工程師、人工智能亲怠、云計算工程師所计、信息安全(黑客反黑客)、大數(shù)據(jù) 团秽、數(shù)據(jù)平臺主胧、嵌入式工程師、流媒體服務(wù)器习勤、數(shù)據(jù)控解踪栋、圖像處理、音頻視頻開發(fā)工程師姻报、游戲服務(wù)器己英、分布式系統(tǒng)、游戲輔助等