① c語言為什麼不能實現面向對象編程
C語言是典型的面向過程的結構化程序設計語言,本身就不支持面向對象編程。
② c語言為什麼這么難學,我為什麼老是學不會
對初學者來說,C語言確實有一定的難點,但是C語言是基礎的語言,並不是最難的所以學不好的主要還是自身的問題。依據本人這么多年的經驗,這嘗試分析下為何這么多人學不好C語言?
C語言本身存在一定難度
C語言主要應用於操作系統、嵌入式底層開發等,在這些領域C語言一直都咱局主導位置,但是在入門上現在比較熱門的php、python、java等語言比C語言稍微容易一些。所以很多人學習到C語言的時候,理解起來很抽象,使用時變化莫測,覺得很難,自己就失去了興趣,慢慢地放棄了。特別是在指針的學習上,是一個檻,很多人就是倒在指針上的。
當然除了指針,C語言裡面還有一些回調、遞歸、函數指針、指針函數也有一定的難點,所以總的來講C語言還是有一定的難度 的,學習C語言一定要多練,不能光看書,多做一些項目慢慢地就好了。
意志力不夠沒有耐心,倒在黎明前夕
學習編程主要挺過去前兩年的積累經驗階段,後面就好多了,有些人就是迷迷糊糊的進入技術崗位了不知道到底做的是什麼,會有一天發現自己突然明白過來很多的事情,以前有些不明白的事情,突然覺得啥都明白了,看似是一件很神奇的事情,本質上來講都是日積月累構造成的。
很多人覺得自己學了這么長時間還是很多不明白,就會產生厭倦心裡,自己都想要放棄,沒有了激情,慢慢地自己就放棄了,其實有時候默默地再堅持一會自己就會慢慢地掌握C語言的精髓,對C語言產生興趣。
C語言沒有別的語言好就業
這涉及一個很現實的問題,學習了編程語言就得找工作,如果學了不好找工作,肯定學習起來的動力就不足,畢竟C語言的工作崗位絕對數量並不少,但是相比java,php,python等語言還是沒法比,而且對入門者的要求相對更高點,薪資上也不一定有多大的優勢,所以對於初學者沒有多大的吸引力。目前這也是當前的市場實際情況。
C語言是不是就不值得學習了?其實這種說法是不對的,其實php,python等底層語言還不是一樣用C語言來實現,所以C語言的重要性不言而喻。不要聽信C語言已經過時之類的謠言,C語言一直都在默默無聞、踏踏實實地做著底層很重要的事情,經久不衰。想要在軟體行業立足發展,C語言還是很值得學習的。
③ C語言會像Java一樣有很多私人開發的框架么
沒有 不過stl到時常常用 c語言一般寫底層的 嵌入式的東西比較多
④ 為什麼C語言不能按照面向對象的思想來編程。
當然可以用C語言進行面向對象編程。
面向對象本身是一種思想,而用哪種語言實現只是一種技術手段。事實上思想和技術的關系本身就是class和object的關系。
class oo {
//這是面向對象的思想類
};
oo java; //java是oo的一個具體的技術實現
oo cxx; //c++是oo的一個具體的技術實現
拿Windows系統來講,它是有C語言編寫的,但是使用的卻是面向對象的思想,這方面可以參考reactos(一個免費開源的用於大學教授操作系統原理的windows系統)。
舉一個例子也許更實際一些,比如,操作系統有兩種操作界面,一種是GUI界面,一種是控制台界面,在windows平台上編寫一個程序,在cmd中運行時,執行控制台界面的代碼,在GUI中運行的時候,執行圖形界面的代碼。這實際上也算是一種面向對象編程中的多態實例。以下示例代碼在vc6.0編譯通過。
#include<stdio.h>
#include<tchar.h>
#include<windows.h>
#include<TLHELP32.H>
charwhat_shell_run()
{
HANDLEhSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnap==0){
return_T('E');
}
PROCESSENTRY32pe32={0};
pe32.dwSize=sizeofpe32;
DWORDdwSelfPid=GetCurrentProcessId();
DWORDdwParentPid=~0;
for(BOOLbLoop=Process32First(hSnap,&pe32);bLoop!=FALSE;bLoop=Process32Next(hSnap,&pe32))
{
if(dwSelfPid==pe32.th32ProcessID){
dwParentPid=pe32.th32ParentProcessID;
break;
}
}
if(dwParentPid==~0)return_T('U');
for(bLoop=Process32First(hSnap,&pe32);bLoop!=FALSE;bLoop=Process32Next(hSnap,&pe32))
{
if(dwParentPid==pe32.th32ProcessID){
if(lstrcmpi(pe32.szExeFile,_T("cmd.exe"))==0)
{
CloseHandle(hSnap);
return_T('C');
}elseif(lstrcmpi(pe32.szExeFile,_T("explorer.exe"))==0){
CloseHandle(hSnap);
return_T('G');
}
}
}
CloseHandle(hSnap);
return_T('U');
}
voidconsole(void){
printf("這是一控制台程序 ");
}
voidgui(void){
MessageBox(0,_T("這是一個GUI程序"),_T("GUI"),MB_OK);
}
intmain()
{
charch=what_shell_run();
switch(ch)
{
case'C':
console();break;
case'G':
gui();break;
}
return0;
}