1、c語(yǔ)言是面向過(guò)程。
2、面向過(guò)程就是分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn)。
3、面向過(guò)程是著重于其中程序設(shè)計(jì)的算法、語(yǔ)言的運(yùn)用。
3、C語(yǔ)言是面向過(guò)程的語(yǔ)言,而C++是面向?qū)ο蟮恼Z(yǔ)言,C++支持面向?qū)ο蠊δ艿某绦蛟O(shè)計(jì)語(yǔ)言。
C語(yǔ)言是面向過(guò)程程序設(shè)計(jì)。
面向過(guò)程程序設(shè)計(jì):是一種以過(guò)程為中心的編程思想。都是以什么正在發(fā)生為主要目標(biāo)進(jìn)行編程。面向?qū)ο蟪绦蛟O(shè)計(jì):是一類以對(duì)象作為基本程序結(jié)構(gòu)單位的程序設(shè)計(jì)語(yǔ)言,指用于描述的設(shè)計(jì)是以對(duì)象為核心,而對(duì)象是程序運(yùn)行時(shí)刻的基本成分。
C#同時(shí)支持面向?qū)ο缶幊毯兔嫦蜻^(guò)程編程,因此可以看作是一門同時(shí)支持兩種范式的多范式編程語(yǔ)言。所以你可以使用 C# 進(jìn)行面向過(guò)程程序設(shè)計(jì),也可以使用 C# 進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì)。其中,面向?qū)ο蟪绦蛟O(shè)計(jì)是 C# 的一大特色。 C#語(yǔ)言特性比較豐富,除了面向過(guò)程和面向?qū)ο笾?,它還支持泛型編程、事件驅(qū)動(dòng)編程等多種編程范式。
“C語(yǔ)言”面向過(guò)程和面向?qū)ο蟮膮^(qū)別是:
面向過(guò)程是著重于其中程序設(shè)計(jì)的算法、語(yǔ)言的運(yùn)用,如設(shè)計(jì)不同功能的函數(shù)。
面向?qū)ο?,按書上說(shuō)是在C語(yǔ)言的基礎(chǔ)上發(fā)展起來(lái)的,通俗說(shuō)也就是更高一級(jí)的C語(yǔ)言,也就是C++,保留了大部分C語(yǔ)言的功能,而在設(shè)計(jì)方面卻著重于對(duì)象的處理,獲得更好地性能。
面向?qū)ο缶幊淌且环N思想,跟具體的語(yǔ)言無(wú)關(guān)。只不過(guò)C++/Java新增了class這個(gè)關(guān)鍵字,更加方便實(shí)現(xiàn)面向?qū)ο缶幊潭选?/p>
其實(shí)C語(yǔ)言也可以實(shí)現(xiàn)面向?qū)ο缶幊蹋ㄟ^(guò)結(jié)構(gòu)體、指針、函數(shù)指針,同樣可以實(shí)現(xiàn)封裝、繼承和多態(tài)
具體可以參考視頻教程:《C語(yǔ)言嵌入式Linux高級(jí)編程》第07期:Linux內(nèi)核中的面向?qū)ο笏枷?/p>
C語(yǔ)言本身是面向過(guò)程的編程語(yǔ)言,它沒(méi)有提供類似于類(class)和對(duì)象(object)的概念,這些概念是在面向?qū)ο缶幊陶Z(yǔ)言中常見(jiàn)的。通過(guò)結(jié)構(gòu)體(struct)和函數(shù)指針等C語(yǔ)言特性,可以模擬出一些面向?qū)ο缶幊痰奶匦浴?/p>
下面是一種可能的方式來(lái)理解C語(yǔ)言中的"面向?qū)ο?#34;概念:
結(jié)構(gòu)體(Struct) - C語(yǔ)言中的結(jié)構(gòu)體可以看作是面向?qū)ο缶幊讨械念?。結(jié)構(gòu)體允許你將一組相關(guān)的變量(成員)組合在一起。例如,如果你正在編寫一個(gè)程序來(lái)管理學(xué)生信息,你可能會(huì)創(chuàng)建一個(gè)名為"Student"的結(jié)構(gòu)體,包含學(xué)生的姓名、年齡、學(xué)號(hào)等成員。
c
struct Student {
char name[50];
int age;
int id;
};
函數(shù)指針 - 由于C是過(guò)程式語(yǔ)言,它并沒(méi)有直接提供類似于對(duì)象方法(object methods)的功能。通過(guò)使用函數(shù)指針,你可以模擬出這個(gè)功能。例如,你可以創(chuàng)建一個(gè)指向特定類型函數(shù)的指針,這個(gè)函數(shù)接受一個(gè)特定的結(jié)構(gòu)體作為參數(shù),并對(duì)其進(jìn)行操作。
c
struct Student {
char name[50];
int age;
int id;
};
void printStudentInfo(struct Student* student) {
printf("Name: %s\n", student->name);
printf("Age: %d\n", student->age);
printf("ID: %d\n", student->id);
}
int main() {
struct Student student1;
strcpy(student1.name, "Alice");
student1.age = 20;
student1.id = 12345;
printStudentInfo(&student1);
return 0;
}
在上述例子中,"printStudentInfo"函數(shù)就像是一個(gè)"Student"類的"printInfo"方法一樣。雖然這種方式不能完全模擬面向?qū)ο缶幊痰乃刑匦裕梢蕴峁┮环N類似的感覺(jué)。
必須注意的是,C語(yǔ)言并不是面向?qū)ο蟮恼Z(yǔ)言。在C++或Java等真正的面向?qū)ο笳Z(yǔ)言中,有更完整的面向?qū)ο筇匦?,例如繼承、封裝和多態(tài)等。這些特性在C語(yǔ)言中并不能直接實(shí)現(xiàn),需要借助其他技巧或工具(如面向?qū)ο蠓庋b庫(kù))來(lái)實(shí)現(xiàn)。
面向?qū)ο笫且环N思想,和語(yǔ)言本身沒(méi)有多大的關(guān)系,只是一些語(yǔ)言比如C++Java C#等,面向?qū)ο缶幊谈臃奖?,也有更多的特?用C 可以寫出面向?qū)ο箫L(fēng)格的程序,linux源碼里面都有很多類似的用法,但是你可能會(huì)覺(jué)得很別扭,因?yàn)檫@樣的實(shí)現(xiàn)都需要用到回調(diào)函數(shù)。所以你應(yīng)該選擇合適的工具,需要面向?qū)ο蟮臅r(shí)候,還是請(qǐng)選擇C++吧。先找一本C++的教材看看。
c語(yǔ)言是面向過(guò)程的。面向過(guò)程是著重于其中程序設(shè)計(jì)的算法、語(yǔ)言的運(yùn)用,如設(shè)計(jì)不同功能的函數(shù)。C++是面向?qū)ο蟮?。C語(yǔ)言能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。C語(yǔ)言是僅產(chǎn)生少量的機(jī)器語(yǔ)言以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的高效率程序設(shè)計(jì)語(yǔ)言。
不是。
(1)c語(yǔ)言是面向過(guò)程的語(yǔ)言,是一個(gè)結(jié)構(gòu)化的語(yǔ)言,考慮如何通過(guò)一個(gè)過(guò)程對(duì)輸入進(jìn)行處理得到輸出;
c++是面向?qū)ο蟮恼Z(yǔ)言,主要特征是“封裝、繼承和多態(tài)”。封裝隱藏了實(shí)現(xiàn)細(xì)節(jié),使得代碼模塊化;
派生類可以繼承父類的數(shù)據(jù)和方法,擴(kuò)展了已經(jīng)存在的模塊,實(shí)現(xiàn)了代碼重用;
多態(tài)則是“一個(gè)接口,多種實(shí)現(xiàn)”,通過(guò)派生類重寫父類的虛函數(shù),實(shí)現(xiàn)了接口的重用。
(2)c語(yǔ)言和c++動(dòng)態(tài)管理內(nèi)存的方法不一樣,c語(yǔ)言是使用malloc/free,而c++除此之外還有new/delete運(yùn)算符;
(3)c++支持函數(shù)重載,c語(yǔ)言不支持函數(shù)重載;
(4)c++中有引用,c語(yǔ)言中不存在引用的概念。
C++是面向?qū)ο蟮模╫bject oriented programming—OOP)。強(qiáng)調(diào)對(duì)象,由對(duì)象實(shí)施動(dòng)作。
C是面向過(guò)程的(procedure oriented programming—POP)。強(qiáng)調(diào)執(zhí)行的過(guò)程。
總結(jié)起來(lái)就是:
面向?qū)ο笫鞘紫瘸橄蟪龈鞣N對(duì)象(各種類),把數(shù)據(jù)和方法都封裝在對(duì)象中(類),然后各個(gè)對(duì)象之間發(fā)生相互作用。
面向過(guò)程是將問(wèn)題分解成若干步驟(動(dòng)作),每個(gè)步驟(動(dòng)作)用一個(gè)函數(shù)來(lái)實(shí)現(xiàn),在使用的時(shí)候,將數(shù)據(jù)傳遞給這些函數(shù)。
舉個(gè)栗子:下雨了,人打開(kāi)雨傘
C++是這么做的:涉及到三個(gè)對(duì)象:雨,人,傘。兩個(gè)動(dòng)作:雨下,人打開(kāi)傘。
首先三個(gè)對(duì)象,即定義三個(gè)類。雨對(duì)象Rain,它有下雨的方法fall();人對(duì)象Person,他有打開(kāi)的方法open();傘對(duì)象Umbrella;
1.Rain
2.{
3. fall();
4.}
5.Person
6.{
7. open();
8.}
9.main()
10.{
11. Rain rain;
12. Person person;
13. Umbrella umbrella;
14. rain.fall();
15. person.open(umbrella);
16.}
而C是這么做的:
面向過(guò)程:兩個(gè)過(guò)程-> ① 下雨了; ② 人打開(kāi)雨傘;分別對(duì)應(yīng)兩個(gè)函數(shù)
1.main()
2.{
3. rain();
4. open(umbrella);
5.}