精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C語言編程核心要點,男人看了沉默,女人看了流淚

開發 后端
筆者有十余年的C++開發經驗,相比而言,我的C經驗只有一兩年,C比較簡單,簡單到《The C Programming Language》(C程序設計語言)只有區區的200多頁,相比上千頁的C++大部頭,不得不說真的很人性化了。

 本文轉載自微信公眾號「碼磚雜役 」,作者我不想種地。轉載本文請聯系我不想種地公眾號。

引言

筆者有十余年的C++開發經驗,相比而言,我的C經驗只有一兩年,C比較簡單,簡單到《The C Programming Language》(C程序設計語言)只有區區的200多頁,相比上千頁的C++大部頭,不得不說真的很人性化了。

[[330383]]

C精簡的語法集和標準庫,讓我們可以把精力集中到設計等真正重要的事情上來,而不是迷失在語法的海洋里,這對于初學者尤其重要。雖然C有抽象不足的缺點,但我更喜歡它的精巧,只需要花少量的時間,研究清楚它每一個知識點,看任何C源碼就不會存在語法上的障礙,大家需要建立的知識共識足夠少,少即是多,少好于多。

我教過6個人編程,教過HTML,教過JAVA,也教過C++。最近,我在教我小孩編程,他只有十歲,很多人建議我選擇Python,但我最終選擇了C,因為C簡單且強大,現在看來,好像是個不錯的選擇。

類型

C是強類型語言,有short、long、int、char、float、double等build-in數據類型,類型是貫穿c語言整個課程的核心概念。

struct、union、enum屬于c的構造類型,用于自定義類型,擴充類型系統。

變量

變量用來保存數據,數據是操作的對象,變量的變字意味著它可以在運行時被修改。

變量由類型名+變量名決定,定義變量需要為變量分配內存,可以在定義變量的同時做初始化。

  1. int i;  
  2. float f1 = 0.5, f2= 0.8; 

常量

  1. const int i = 100; 
  2. const char* p = "hello world"

運行中恒定、不可變,編譯期便可確定。

數組

光有簡單變量顯然不夠,我們需要數組,它模擬現實中相同類型的多個元素,這些對象是緊密相鄰的,通過數組名+位置索引便能訪問每個元素。

二維、三維、高緯數組本質上還是線性的,二維數組通過模擬行列給人平面的感覺,實際存儲上還是連續內存的方式。

數組是靜態的,在定義的時候,數組的長度就已經確認,運行中無法伸縮,所以有時候我們不得不為應付擴充多分配一些空間。數組元素不管用多用少,它都在哪里,有時候,我們會用一個int n去界定數組實際被使用的元素個數。

函數

函數封裝行為,是模塊化的最小單元,函數使得邏輯復用變得可能。

C是過程式的,現實世界都可以封裝為一個個過程(函數),通過過程串聯和編排模擬世界。

用C編程,行為和數據是分離的。調用函數的時候,調用者通過參數向函數傳遞信息,函數通過返回值向調用者反饋結果。

函數最好是無副作用的,函數內應該盡量避免修改全局變量或者靜態局部變量,更好的方式是通過參數傳遞進來,這樣的函數只是邏輯的盒子,它滿足線程安全的要求。

有了變量和函數,就可以編寫簡單的程序了。

控制語句

  • 分支:if 、else、else if、switch case、?:
  • 循環:while、do while、for
  • break、continue、goto、default

結構體

build-in數據類型不足以描繪現實世界,或者用build-in類型描述不夠直接,結構體用來模擬復合類型,它賦予了我們擴充類型系統的能力,我們把類型組合到一起構建更復雜的類型,而每個被組合的成分就叫成員變量。

結構體內的成分,對象通過點(.)運算符,指針通過箭頭(->)訪問成員。

指針

C的靈魂是指針,指針帶來彈性,指針的本質是地址。

需要區分指針和指針指向的對象,多個指針變量可指向同一個對象,一個指針不能同時指向多個對象。

指針相關的基本操作包括:賦值(修改指針指向),解引用(訪問指針指向的對象),取地址(&variable),指針支持加減運算。

因為指針變量要能覆蓋整個內存空間,所以指針變量的長度等于字長,32位系統下32位4字節,64位系統下64位8字節。

指針的含義遠比上述豐富,指針跟數組結合便有了指針數組(int* p[n])和數組指針(int (*p)[n]),指針跟函數結合便有了函數指針(ret_type (*pf)(param list)),指針跟const結合便有了const char*/char* const/const char* const,還有指向指針的指針(int **p)。

既可以定義指向build-in數據類型的指針,也可以定義指向struct的指針,void*表示通用(萬能)指針,它不能被解引用,也不能做指針算術運算。

函數指針與回調(callback)

c source code被編譯鏈接后,函數被轉換到可執行程序文件的text節,進程啟動的時候,會把text節的內容裝載到進程的代碼段,代碼段是c進程內存空間的一部分,所以任何c函數都會占一塊內存空間,函數指針就是指向函數在代碼段的第一行匯編指令,函數調用就會跳轉到函數的第一個指令處執行。

函數指針經常被用來作為回調(callback),c語言也會用包含函數指針成員的結構體模擬OOP,本質上是把C++編譯器做的事情,轉給程序員來做(C++為包含虛函數的類構建虛函數表,為包含虛函數的類對象附加虛函數表的指針)。

字符串

char*是一類特殊的指針,它被稱為c風格字符串,因為它總是以‘\0’作為結尾的標識,所以要標識一個字符串,有一個char*指針就夠了,字符串的長度被0隱式指出,跟字符串相關的STD C API大多以str打頭,比如strlen/strcpy/strcat/strcmp/strtok。

內存和內存管理

指針提供了c語言直接操作底層內存的能力,c程序區分棧內存和堆內存,棧內存是函數內的局部變量,它隨程序執行而動態伸縮,所以不要返回臨時變量的指針,棧內存容量有限(8/16M),所以我們要避免在函數內創建過大的局部變量,要警惕遞歸爆棧。

堆內存也叫動態內存,它由一個叫動態內存配置器的標準庫組件管理,glibc的默認動態內存配置器叫ptmalloc,初始版本有性能問題,但后面用線程私有解決了競爭改善了性能。動態內存配置器是介于kernel與應用層的一個層次,從內核視角看ptmalloc是應用程序,從應用層來看ptmalloc又是系統庫。malloc跟free必須配對,這是程序員的職責,動態分配的內存丟失引用就會導致內存泄漏,指向已釋放的內存塊俗稱野(懸垂)指針。

預處理

從c source file到可執行程序需要經過預處理-編譯-匯編-鏈接多個階段,預處理階段做替換、消除和擴充,預處理語句以#打頭。

宏定義,#define,宏定義可以用\做行連接,#用來產生字符串,##用來拼接,宏定義的時候要注意加()避免操作符優先級干擾,可以用do while(0)來把定義作為單獨語句,#undef是define的反操作。

#if #ifdef #ifndef #else #elif #endif用來條件編譯,為了避免頭文件重復包含,經常用#ifndef #define #endif。

#include用來做頭文件包含;#pragma用來做行為控制;#error用來在編譯的時候輸出錯誤信息。

__FILE__、__LINE__、_DATE_、_TIME_、_STDC_等標準預定義宏可以被用來做一些debug用途。

#typedef用來定義類型別名。比如typedef int money_t;money_t比int更有含義。

typedef也能用來為結構體取別名,有時候會這樣寫:

  1. typedef struct 
  2.   int a; 
  3.   int b; 
  4. } xyz_t; 

這樣在定義結構體變量的時候就可以少敲幾下鍵盤。

typedef也可以用來重定義函數指針類型,比如 typedef void (*PF) (int a, int b); PF是函數指針類型,而非函數指針變量。

枚舉

枚舉能增加代碼可讀性和可維護性,枚舉本質上是int,只是為了更有含義,將有限取值的幾個int值放在一組,比如定義性別:enum sex { male = 1, female };

可以在定義的時候賦值,比如male=1,后面的值依次遞增1,如果不賦值則從0開始。

聯合體(union)

結構體和聯合體(共用體)的區別在于:結構體的各個成員會占用不同的內存,互相之間沒有影響;而共用體的所有成員占用同一段內存,修改一個成員會影響其余所有成員。

  1. union u_data 
  2.     int n; 
  3.     char ch; 
  4.     double f; 
  5. }; 

其實本質上,聯合體就是對一塊內存的多種解釋,大小按最大的來。

位域(bitfield)

  1. struct SNField 
  2.        unsigned char seq:7 ;        // frame sequnce 
  3.        unsigned char startbit:1 ;   // indicate if it's starting frame 1 for yes. 
  4. };    

節省空間,在面向底層的編碼,或者編寫處理網絡等程序時候用的比較多,注意這個語法特征是跟機器架構相關的。

位操作

  1. 位與 &
  2. 位或 |
  3. 位取反 ~
  4. 位異或 ^
  5. 位移 << >>

static、extern、register、volatile、sizeof

  1. static修飾全局函數,表示模塊內(編譯單元)內可用,不需要導出全局符號。
  2. static修飾局部變量,意味超越函數調用的生命周期,不存儲在棧上,只會被初始化1次。
  3. extern聲明外部變量。
  4. register,寄存器變量,建議編譯器將變量放在寄存器里。
  5. volatile,告訴編譯器不要做優化,每次從內存讀取,不做寄存器優化。
  6. sizeof求大小,可以作用于變量,類型,表達式

可變參數

  1. void simple_printf(const char* fmt, ...) 
  2. va_list、va_start、va_arg、va_end 

C的高級感

  1. 泛型:linux內核鏈表,通過offset和內嵌node,寫出泛型鏈表,參考:https://www.cnblogs.com/wangzahngjun/p/5556448.html
  2. OOP:通過定義帶函數指針成員變量的結構體,在運行中,為結構體對象設置上函數指針,模擬運行時綁定,實現類似OOP多態的感覺。

GNU C擴展

GNU C擴展不是標準C,建議以符合標準C的方式編寫C代碼,但如果你閱讀linux kernel code,你會發現有很多有趣看不懂的語法,它來自GNU C擴展,它確實也帶來了一些便利性。

比如結構體成員可以不按定義順序初始化:

  1. struct test_t { int a; int b; };  
  2. struct test_t t1 = { .b = 1, .a = 2 }; 

比如可以通過指定索引初始化數組:

int a[5] = {[2] 5,[4] 9};

或 int a[5] = { [2] = 4, [4] = 9 };

相當于int a[5] = {0, 0, 4, 0, 9};

或者int a[100] = {[0 ... 9] = 1, [10 ... 98] = 2, 3};

比如0長度數組

  1. struct foo 
  2.    int i; 
  3.    char a[0]; 
  4. }; 

比如用變量作為數組長度

  1. void f(int n) 
  2.     char a[n]; 
  3.     ... 

比如case范圍,case 'A' ... 'Z' case 1 ... 10

比如表達式擴展({...}),比如三元運算符擴展...

更多擴展請參考:https://my.oschina.net/LinuxDaxingxing/blog/751319

 

責任編輯:武曉燕 來源: 碼磚雜役
相關推薦

2023-03-09 09:14:51

ChatGPTAI

2011-05-07 11:11:21

LCD拼接

2009-10-22 14:55:06

網絡綜合布線資料

2022-10-11 08:14:14

多線程鎖機制

2021-06-09 14:48:04

自動駕駛數據人工智能

2023-02-15 08:30:05

2014-08-19 09:39:46

程序員

2015-10-19 09:23:44

新編編程女人

2025-03-31 08:45:00

作用域Python編程

2020-09-01 13:07:52

女人計算機編程

2020-03-02 19:08:21

JVMJDKJRE

2025-05-29 09:10:18

2023-08-04 09:43:16

Socket編程Python

2022-09-16 10:01:58

編程

2012-11-01 13:41:25

編程語言BasicPerl

2019-12-24 15:16:16

SSD固態硬盤CPU

2022-07-12 08:27:18

Zadig開源

2010-06-30 10:34:39

女人男人

2010-07-14 15:56:54

職場惡行

2021-01-04 13:33:08

黑客微軟網絡攻擊
點贊
收藏

51CTO技術棧公眾號

久久久久久九九九九| 日韩在线免费av| 精品少妇一区二区三区在线| 日韩在线视频免费| 欧美资源在线| 精品国内产的精品视频在线观看| 波多野结衣中文字幕在线播放| 国内小视频在线看| 91色乱码一区二区三区| 国产欧美在线视频| 国产对白videos麻豆高潮| 在线日韩一区| 欧美一区二区黄色| 国产1区2区在线| 日本在线人成| 99免费精品视频| 成人激情视频在线| 欧美三级韩国三级日本三斤在线观看 | 成人午夜私人影院| 国产精品对白刺激| 久久精品久久精品久久| 久草免费在线观看| 超碰这里只有精品| 欧美国产1区2区| av一区和二区| 久久久久久亚洲av无码专区| 欧美另类亚洲| 中文精品99久久国产香蕉| 日本人妻一区二区三区| 韩国精品视频在线观看| 五月激情综合色| 91免费视频黄| 国产精品麻豆一区二区三区| 成人白浆超碰人人人人| 成人欧美在线视频| 樱花视频在线免费观看| 日韩视频一区| 久久6免费高清热精品| 免费看的黄色录像| 色综合久久中文| 精品区一区二区| 国产传媒免费观看| a成人v在线| 色伊人久久综合中文字幕| 久久艹国产精品| 老司机免费在线视频| 中文天堂在线一区| 日本一区二区三区免费看| 香蕉视频免费看| 丰满放荡岳乱妇91ww| 成人h视频在线观看播放| 久久久久久久久久一级| 久久久久国产精品一区二区 | 国产精品麻豆免费版| 国产精品久久久久久免费| 免费日本视频一区| 国产精品三级久久久久久电影| 区一区二在线观看| 久色成人在线| 国产成人精品视频| www.久久久久久久| 久久久久国产精品一区三寸| 欧美在线视频一区| 国产精品一区av| 日韩a级片在线观看| 9191国语精品高清在线| 久久天天躁日日躁| 18岁成人毛片| 91成人精品| 欧美老女人在线视频| 久久久久久久国产视频| 91久久中文| 91国产高清在线| 国产精品va无码一区二区三区| 国产手机视频一区二区| 国产999精品视频| 中文字幕一区二区三区免费看 | 国产精品私人影院| 亚洲最大色综合成人av| 国内精品久久久久国产| 亚洲乱码国产乱码精品精可以看 | 毛片av在线| 亚洲免费观看高清完整版在线观看 | 亚洲高清影院| 在线综合+亚洲+欧美中文字幕| 色偷偷中文字幕| 国产精品99久久免费观看| 日韩av中文字幕在线免费观看| 国产精品成人一区二区三区电影毛片| 欧美人妖在线| 久久视频这里只有精品| 国产精品成人av久久| 蜜桃av一区| 成人av资源在线播放| 黄色美女一级片| 久久蜜桃av一区二区天堂| 亚洲三级一区| 福利写真视频网站在线| 91成人免费网站| 少妇愉情理伦片bd| 一区二区视频免费看| 全国精品免费看| 在线观看日韩av| 麻豆视频在线观看| 日韩电影在线观看电影| 亚洲自拍偷拍网址| 欧洲成人av| 亚洲婷婷国产精品电影人久久| 18禁网站免费无遮挡无码中文| 欧美成人a交片免费看| 91精品国产综合久久福利软件 | 高清国产一区二区| 视频一区二区三区在线观看| 青春草视频在线| 91官网在线观看| 国产在线观看免费播放| jiujiure精品视频播放| 久久久久久久久久久久av| 五月天中文字幕| k8久久久一区二区三区| 亚洲第一综合网站| 欧美电影h版| 精品欧美一区二区在线观看| 国产精品酒店视频| 久久久噜噜噜| 国产综合欧美在线看| 黄a在线观看| 欧美日韩小视频| av网站免费在线播放| 欧美视频不卡| 成人在线免费观看视视频| 国产最新视频在线观看| 午夜精品一区在线观看| 污视频在线观看免费网站| 色综合久久网| 国产精品久久一区| 欧美拍拍视频| 狠狠综合久久av一区二区小说| 性xxxxxxxxx| 亚洲一级淫片| 成人午夜激情网| 91社区在线高清| 日韩欧美亚洲成人| 最近中文字幕无免费| 亚洲电影av| 亚洲国产古装精品网站| www.成年人视频| 国产美女亚洲精品7777| 日韩一级裸体免费视频| 最近中文字幕在线免费观看| 久久精品水蜜桃av综合天堂| 久久国产精品网| 日韩在线视频一区二区三区| 美日韩在线视频| 国产乱人乱偷精品视频a人人澡| 国产日产欧美一区二区三区| 日韩欧美xxxx| 精品高清久久| 国产精品视频网| 在线激情网站| 在线观看日产精品| a级黄色免费视频| 久久精品国产77777蜜臀| 一区二区在线观| 2019中文亚洲字幕| 欧美精品性视频| 国产aⅴ爽av久久久久成人| 亚洲日本护士毛茸茸| 香蕉视频xxxx| 午夜欧美视频| 国产欧美一区二区三区另类精品 | 波多野结衣理论片| 国产精品无码永久免费888| 尤物国产在线观看| 欧美精品一级| 久久精精品视频| 性欧美videohd高精| 色综合影院在线| 国产视频一二三四区| 夜夜嗨av一区二区三区网页| 国产高清成人久久| 久久久久99| 亚洲美女自拍偷拍| 国产乱人伦丫前精品视频| 国产91精品最新在线播放| av黄色在线观看| 这里只有精品视频在线观看| 日本少妇bbwbbw精品| 久久婷婷一区二区三区| 中文字幕日韩综合| 亚洲成人在线| 欧美一区二区福利| 精品中文视频| 欧美中文字幕在线| 美女的奶胸大爽爽大片| 久久精品色综合| 日本中文字幕不卡免费| 男人的天堂在线视频免费观看 | 国产乱淫av片免费| 黄色成人在线播放| 任你操精品视频| 波多野结衣中文字幕一区| 污版视频在线观看| 怡红院精品视频在线观看极品| 欧美日韩免费精品| 日本一区影院| 国产精品扒开腿做| 成人女同在线观看| 在线精品视频视频中文字幕| 亚洲欧美高清视频| 欧美日韩国产一二三| 日韩欧美高清在线观看| 中文字幕一区二区三区精华液| 国产白嫩美女无套久久| 狠狠色丁香婷综合久久| 一本久道综合色婷婷五月| 欧美在线视屏| 亚洲一区二区自拍偷拍| 外国成人在线视频| 成人91免费视频| 久久精品97| 国产www精品| 国产精品一品| 久久中文字幕在线| h网站在线免费观看| 亚洲精品www久久久久久广东| 国产美女裸体无遮挡免费视频| 欧美性20hd另类| 国产一级中文字幕| 日韩毛片精品高清免费| 久久久久久久毛片| 久久色在线观看| 国产日韩视频一区| 国产99久久久久| 一二三av在线| 美女尤物国产一区| 三级在线免费看| 三级不卡在线观看| 国产91对白刺激露脸在线观看| 国产精品99免费看| 肉大捧一出免费观看网站在线播放 | 一级黄色性视频| www.久久久久久久久| www.美色吧.com| 国产成人午夜精品5599| 在线播放黄色av| 国产尤物一区二区在线| 日韩av综合中文字幕| 久久久久久无码午夜精品直播| 精品久久久一区| 日本天堂网在线观看| 亚洲午夜久久久久久久久电影院| 精国产品一区二区三区a片| 亚洲色图都市小说| 国精产品一区一区二区三区mba| 1区2区3区精品视频| 伊人在线视频观看| 亚洲乱码日产精品bd| 无码人妻精品一区二区三区夜夜嗨| 亚洲欧洲精品成人久久奇米网| 国产探花在线视频| 亚洲色图20p| 免看一级a毛片一片成人不卡| 亚洲专区一二三| 日本少妇做爰全过程毛片| 欧美日韩国产精品一区| 五月天婷婷激情| 在线观看视频欧美| 亚洲天堂999| 日韩一区二区三区视频在线观看 | 日本不卡的三区四区五区| 杨幂毛片午夜性生毛片| 久久91精品久久久久久秒播| 男女污污视频网站| 国产不卡视频在线播放| 国产精品无码电影| 国产欧美日韩视频在线观看| 日本在线观看网址| 一区二区三区在线观看欧美| 不卡的免费av| 日本电影亚洲天堂一区| 一级全黄裸体免费视频| 日韩无一区二区| 午夜福利理论片在线观看| 亚洲午夜精品久久久久久性色 | 免费观看黄色的网站| 夜夜躁很很躁日日躁麻豆| 天天av天天翘天天综合网| 精品黑人一区二区三区| 欧美一区二区视频在线观看2022 | 久久国产精品精品国产色婷婷| 久久99视频| 伊人色综合影院| 在线成人h网| 欧美精品aaaa| 成人午夜电影久久影院| 性欧美13一14内谢| 亚洲久草在线视频| 亚洲 欧美 中文字幕| 91精品免费在线观看| 色天堂在线视频| 欧美成人黑人xx视频免费观看| 人在线成免费视频| 亚洲一区二区三区四区视频| 欧美国产极品| 日本免费在线视频观看| 国产精品一级| 日本美女久久久| 欧美极品美女视频| 日韩伦人妻无码| 欧美一区二区三区视频免费| 日韩偷拍自拍| 久久99久久亚洲国产| 色猫猫成人app| 精品乱码一区二区三区| 一区二区电影| 在线观看av日韩| 97精品国产露脸对白| 欧美人妻一区二区| 欧美日韩精品福利| 邻家有女韩剧在线观看国语| 欧美精品激情视频| 97久久精品一区二区三区的观看方式| 裸模一区二区三区免费| 亚洲二区在线| 亚洲AV无码久久精品国产一区| 国产欧美一区二区精品性色超碰 | 国产特黄在线| 26uuu久久噜噜噜噜| jazzjazz国产精品麻豆| 青青草原网站在线观看| 麻豆一区二区三区| av网站免费在线看| 欧美日韩中文字幕综合视频| 日本韩国免费观看| 久久国产精品电影| 先锋影音网一区二区| 日韩国产在线一区| 久久黄色网页| 在线观看av中文字幕| 精品久久久久久久久久久久久久 | 日韩一区二区三区精品视频| 92国产在线视频| 国产成人免费av| 免费av一区二区三区四区| 男人操女人免费| 久久综合色8888| 中文字幕在线播| 亚洲天堂第一页| 第四色男人最爱上成人网| 日本午夜精品一区二区三区| 久久久久国产精品一区三寸| 国产真实乱人偷精品人妻| 在线精品国精品国产尤物884a| 免费在线国产| 国产精品第七十二页| 精品九九在线| 黄色小视频免费网站| 1000精品久久久久久久久| 国产黄频在线观看| 欧美黑人性视频| 激情小说亚洲色图| 国产成人精品视频免费看| 91蜜桃免费观看视频| 成人免费视频国产免费| 在线播放日韩欧美| 免费一级欧美在线观看视频| 欧美 另类 交| 成人免费视频一区| 女人十八岁毛片| 亚洲无线码在线一区观看| 国产成人77亚洲精品www| www.黄色网址.com| 成人白浆超碰人人人人| 日韩综合在线观看| 久久精品视频99| 国产成人aa在线观看网站站| 国产成人精品视频免费看| 国产精品视频麻豆| 精品人妻无码一区二区色欲产成人 | 日韩理论片一区二区| 黄色三级网站在线观看| 国产成人综合一区二区三区| 国产电影一区二区在线观看| 亚洲精品一区二区18漫画| 福利视频第一区| 蜜桃视频在线观看免费视频网站www| 91精品综合久久| 亚洲免费婷婷| 男女全黄做爰文章| 亚洲电影免费观看| 成人日韩av| 男女私大尺度视频| 中文字幕乱码亚洲精品一区| 午夜精品久久久久久久96蜜桃| 欧美亚洲另类激情另类| 国产精品久久久久久麻豆一区软件 | 91最新在线免费观看| 国产精品一区毛片| 69xx绿帽三人行|