① 有關c語言方面的書籍有什麼
1、《C語言入門經典(第5版)》:2013年清華大學出版社出版的圖書,作者是Ivor Horton。第五版是全新推出的最新版本,全書融合了作者多年的編程經驗,給人一種深入淺出的感覺,適合初學者;
2、《C語言編程:一本全面的C語言入門教程(第三版)》:本書是C語言入門經典教材,其第一版發行至今已有20年的歷史。本書內容詳實全面,由淺入深,示例豐富弊肆,並在每個章節後面附有部分習題,非常適合讀者自學使用;
3、《C語言從入門到精通》:租跡轎以零基州亂礎講解為宗旨,用實例引導讀者深入學習,深入
② C語言學習資源整理
C語言學習資源匯總
一、C語言入門課程
1.實驗樓一C語言入門教程
教程+在線開發環境的方式,教程文檔詳細的講解C語言基礎知識,在線開發環境和本地一樣,可以梁握隨時動手跟著教程操作,動手學習的方式非常適合入門初學者。
2.gitbook一一笨方法學C
內容較完整豐富,相當於一本書籍了,適合新手入門學習。
3.菜鳥教程一C 語言教程
純在線文字教程,講解的不是那麼詳細,不過簡單易懂,適合入門初學者學習,看完後可對C語言有個大概的認知。
4.幕課網--C語言入門
教程+"環境",講解的比較細致,也很簡單易懂,跟著教程可傻瓜式操作學習,適合入門新手。局渣盯
5.網易雲課堂一-C語言基礎入門
純視頻方式,每個視頻15分鍾左右,介紹的比較詳細,如果喜愛看視頻來學習的話,可以看看。
二、C語言實戰項目
免費的項目教程:
C語言製作2048;
C語言快速實現五子棋、鬥地主的發牌器;
C語言製作簡單計桐和算器;
用 C語言編寫自己的編程語言。
三、C語言筆記文章整理
學完基礎、做完項目之後,就會有各種問題,這個時候就需要學習筆記啦,或自己總結,或看別人的總結都可以。
1.C 語言中的指針和內存泄漏。
2.如何寫出優美的 C 代碼。
3.C語言的整型溢出問題,酷 殼 - CoolShell.cn。
4.易被遺忘的C/C++要點總結。
5.C/C++的mem函數和strcpy函數的區別和應用。
6.C語言的變數作用域及頭文件。
7.10個經典的C語言面試基礎演算法及代碼。
四、其他資源
再整理一些資源,零七碎八的,對於學習C語言的過程中會很有幫助的。
1.awesome-c(英文)、awesome-c-cn(中文版)
2.源碼閱讀--十個C開源項目。
3.一千行以下有哪些值得學習的小型開源項目? - 互聯網-知乎。
4.值得推薦的C/C++框架和庫。
5.C與 C++ 的真正區別在哪裡?
6.初學者的編程自學指南。
7.免費學習編程的10個好工具。
8.11款學習編程的好玩的瀏覽器游戲(譯)。
9.每個程序員都應該收藏的演算法復雜度速查表。
③ 急求c語言教程和c程序設計的抽象思維這兩本書的電子版,txt. pdf. 鏈接都行。。。作者是
C語言解析教程(原書第4版)(美) 凱利.pdf
http://download.csdn.net/download/oqqdove1/5707875
④ c語言全面解析指針,十個知識點整理
C語言10個小知識了解指針
1.若有代腔虧碼,int a=10,*p;p是指針:也是一個變數,且是一個只能用來存放地址的變數。
2.若有代碼,int a=10,*p;p=&a;當執行了上面的代碼,會說「p指向了a」,其實就是「p指針變數存放了a的地址」。
3.兩個*的區別,有如下代碼:inta=10,*p;//該處的* 說明p是一個指針變數用來存放地址p=&a;*p=*p+1;//該處的* 表示p所指的變數中的值即a的值10。
總結: 變數定義時的* 說明該變數是一個指針,調用語句中的*表示指針指向的變數中的值。[此處是比較容易混淆的]。
4.int a=10,*p;p=&a;則:*p=*p+1;//等價:*p +=1;(0)++++(*p);表示的內容相同,都是p所指變數的值+1。
5. *p++和(*p)++的區別是: 等價於* (p++),先獲取 p當前所指元素的值,然後p指針+1(p指針向後移動一個單元,一般用在數組中,普通變數會越界);後者僅僅是p所指變數的值+1。
6.定義變數時,一個*說明該變數是指針,兩個*說明該變數是指向指針的指針(存放的是指針變數的地址)。int a=10,*p,**q;p=&a;//p指向a,*p的結果是10,q=&p;//q 指向p,* q的結果是p的地址值,**G的結果才是10。
7.如果調用函數傳遞的是地址,那麼被調函數中形參就需要使用指針接收,在函數中對指針所指變數值的改變,會影響到調用函數中的變數值。
8.一維數組名和指針的區別,有定義:int a[10],*p;
p=a;//合法,因為,一維數組名存的是數組首地址,這樣使 p指向了a首地址,也就是第一個元素的地址。
a++; / /不合法,因為a是一個地址常量,開辟了就不能再修改了,一切給數組名字賦值的操作都是非法的。
p++://合法,因為p是一個指針,p++表示從當前向後移動了一個位置。
對於上面的定義,a[i] 、* (ati)、* (p+i)、p[] 都是茄告合法,都是取下標為i的元素值。所以: p++; 是使指針向後移動,(*p) 十+是當前所指變數的值內容+1。
9.若有定義:int a[3][22],*p[3],iJ;*p[3] 中[優先順序[高於*,說明p是一個數組名,前面的*說明該數組中每個元素都用來存放指針,這叫指針數組。如果p和a產生聯系,則只能通過逐個伍納神賦值的方式完成,即: for(i=0;i<3;i++)p[] =a[; //合法,因為a[] 是二維數組中每行的首地址,所以可以存放到p數組中。
但是 p=a;是非法的,因為a是地址,p是數組的名字,並不是指針名下面獲取數組元素的方式都是合法的:*(p[i]+j)*(*(p+i)+j) (*(p+i))[j]。
10.若自定義函數的實參是一維數組名,則該函數的首部可以寫成: fun(int al) fun (int a[M]) fun(int*a) M表示長度,若有自定義函數的實參是二維數組名,則該函數的首部可以寫成: fun(int (*a)[N])。
fun(int al[N]) fun(int a[M][NJ) M表示行數,N表示列數,若有指針數組作為fun函數的實參,則該函數的首部可以寫成:fun(int *a[M]) fun(int *al) fun(int**a)。