C語言筆記

Tips

  • C語言區(qū)分大小寫
  • C編譯器忽略空格
  • 所有的 C 語言程序都需要包含 main() 函數(shù)且警,代碼從 main() 函數(shù)開始執(zhí)行革娄。

C11

C11(也被稱為C1X)指ISO標準ISO/IEC 9899:2011沼琉,是當(dāng)前最新的C語言標準舶沿。
在它之前的C語言標準為C99席噩。


C環(huán)境

  1. 文本編輯器 (例:vi/vim)
    輸入程序挑秉,編輯器創(chuàng)建的文件——源文件勋拟。
    C程序源文件擴展名 “.c”
  2. C編譯器 (例:GNU的C/C++編譯器)
    源代碼編譯成最終的可執(zhí)行程序勋磕。
    工作流程:源程序(source code)→預(yù)處理器(preprocessor)→編譯器(compiler)→匯編程序(assembler)→目標程序(object code)→連接器(鏈接器,Linker)→可執(zhí)行程序(executables)

C程序包含內(nèi)容

  1. 預(yù)處理器指令
  2. 函數(shù)
  3. 變量
  4. 語句 & 表達式
  5. 注釋

預(yù)處理

include <stdio.h>
#include "my.h"

stdio.h表示系統(tǒng)文件庫, 也可以聲明其它的敢靡。
.h表示頭文件,因為這些文件都是放在程序各文件的開頭挂滓。
#include 告訴預(yù)處理器將指定頭文件的內(nèi)容插入到預(yù)處理器命令的相應(yīng)位,導(dǎo)入頭文件的預(yù)編譯指令啸胧。
<> 表示系統(tǒng)自帶的庫赶站,也可以寫成" " 表示用戶自定義的庫。
<>直接到系統(tǒng)指定的目錄下查找該文件纺念;
" "先在當(dāng)前目錄查找有無該頭文件贝椿,有則包含該目錄下的頭文件,沒有則到系統(tǒng)指定的目錄下找該頭文件陷谱。
防止重復(fù)include:

  1. #pragma once
    某些老的編譯器不支持
  2. #ifndef XXX
    #define XXX
    #endif
    出現(xiàn)宏名重復(fù)团秽,即字符串中有與宏名相同的字符串
#undef  FILE_SIZE
#define FILE_SIZE 42  //取消原定義,重新定義叭首。
#ifndef MESSAGE
   #define MESSAGE "You wish!"
#endif  //沒有定義MESSAGE习勤,則進行定義

預(yù)定義宏

  1. __DATE__ : 日期
  2. __TIME__ : 時間
  3. __FILE__ : 當(dāng)前文件名
  4. __LINE__: 代碼當(dāng)前行號
  5. __STDC__:當(dāng)編譯器以 ANSI 標準編譯時,則定義為 1焙格。

注釋方式

  1. //單行注釋
  2. /* 單行注釋 */
  3. /*
    多行注釋
    多行注釋
    多行注釋
    */

數(shù)據(jù)類型

  1. 基本類型:整數(shù)類型图毕、浮點類型
  2. 枚舉類型
  3. void類型
    表明沒有可用的值、無類型
    void表示函數(shù)沒有返回值眷唉,
    而用int或其他予颤,則函數(shù)需要有返回值如:
int egg()
{
return 0;
}
  1. 派生類型:指針類型、數(shù)組類型冬阳、結(jié)構(gòu)類型蛤虐、共用體類型、函數(shù)類型

整數(shù)類型

類型 大小 值范圍
char 1字節(jié) -128 到 127 或 0 到 255
unsigned char 1字節(jié) 0 到 255
signed char 1 字節(jié) -128 到 127
int 2 或 4 字節(jié) -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned int 2 或 4 字節(jié) 0 到 65,535 或 0 到 4,294,967,295
short 2 字節(jié) -32,768 到 32,767
unsigned short 2 字節(jié) 0 到 65,535
long 4 字節(jié) -2,147,483,648 到 2,147,483,647
unsigned long 4 字節(jié) 0 到 4,294,967,295

signed表示有符號的肝陪,即+/-驳庭;
unsigned表示無符號。
具體字節(jié)大小查詢:
printf("int 存儲大小 : %lu \n", sizeof(int));

浮點類型

類型 存儲大小 值范圍 精度
float 4 字節(jié) 1.2E-38 到 3.4E+38 6 位小數(shù)
double 8 字節(jié) 2.3E-308 到 1.7E+308 15 位小數(shù)
long double 16 字節(jié) 3.4E-4932 到 1.1E+4932 19 位小數(shù)

枚舉

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
}; //分別 = 1 2 3 4 5 6 7
enum DAY
{
      MON, TUE=3, WED, THU, FRI, SAT, SUN
}; //分別 = 0 3 4 5 6 7 8

枚舉變量定義

enum DAY
{
      MON, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;
enum DAY
{
      MON, TUE, WED, THU, FRI, SAT, SUN
} day;
enum
{
      MON, TUE, WED, THU, FRI, SAT, SUN
} day;

常量

定義常量

  1. #define THIS 10;
  2. const int ABCDE = 10;

存儲類

  1. auto
    只能用在函數(shù)內(nèi),即 auto 只能修飾局部變量饲常。

  2. register

  3. static

  4. extern


運算符

位運算符(二進制)

  1. & 與
  2. | 或
  3. ^ 異或
    相同為0蹲堂,不同為1
  4. ~ 取反
  5. << 二進制左移
    假設(shè)A=60,A<<2得到240
    60二進制:0011,1100
    左移2位后的二進制:1111,0000(即十進制240)
  6. >> 二進制右移
    A=60贝淤,A>>2得到15
    60:0011,1100
    右移2位后的二進制:0000,1111(即十進制15)

循環(huán)

循環(huán)控制語句

  1. break:終止循環(huán)或switch語句柒竞。
  2. continue:立即停止本次循環(huán),開始下一次循環(huán)播聪。
  3. goto:轉(zhuǎn)移到被標記的語句朽基。

作用域

  1. 局部變量
    函數(shù)內(nèi)部使用
  2. 全局變量
    整個程序的生命周期
  • 如果全局變量和局部變量名字相同, 優(yōu)先使用局部變量离陶。
  • 全局變量自動初始化踩晶。

數(shù)組

初始化數(shù)組

int a[5] = {5, 2,4, 7, 50}; //一維數(shù)組

int a[3][4] = {  
 {0, 1, 2, 3} ,   /*  初始化0行 */
 {4, 5, 6, 7} ,   /*  初始化1行 */
 {8, 9, 10, 11}   /*  初始化2行 */
};
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

多維數(shù)組

int x[3][4] //二維數(shù)組


指針

輸出變量地址:
printf("a變量的地址: %p\n", &a );
指針是變量,值為另一個變量的內(nèi)存地址枕磁,即十六進制數(shù)渡蜻。
整數(shù)型、浮點型等指針计济,指針類型都一樣茸苇,而指向的數(shù)據(jù)類型不同。

int main ()
{
   int  a = 20;   
   int  *ip;       

   ip = &a;  //指針指向數(shù)組為:int b[5];  ip = b;
 
   printf("變量地址: %p\n", &a  );  //bffd8b3c
 
   printf("指針存儲地址: %p\n", ip ); //bffd8b3c
 
   printf("指針訪問值: %d\n", *ip ); // 20
 
   return 0;
}

空指針:
int *ip = NULL; //此時地址是0x0
指針的指針:

int  a;
int  *ptr;
int  **pptr;
a = 8;
ptr = &var;
pptr = &ptr;

字符串

char a[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
char a[] = "hello";


結(jié)構(gòu)體

typedef struct abcd   
{
}__attribute__((packed)) abcd;

__attribute__((packed))的作用:取消字節(jié)對齊沦寂,減少占用空間学密,讓內(nèi)存緊湊存儲。


共用體

union Data
{
   int i;
   float f;
   char  str[20];
} data; 

共用體成員訪問運算符(.)


位域

位域的長度不能大于一個字節(jié)的長度传藏,也就是說不能超過8位二進位腻暮。


typedef

typedef struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} Book;

輸入輸出

輸入

scanf() 函數(shù)用于從標準輸入(鍵盤)讀取并格式化;
scanf("%s %d", str, &i); //char前無&毯侦,int前有&
getchar()
gets()

輸出

printf() 函數(shù)發(fā)送格式化輸出到標準輸出(屏幕)哭靖。

  1. %d 格式化輸出整數(shù)
  2. %f 格式化輸出浮點型數(shù)據(jù)
  3. %s 字符串
  4. %c 字符

putchar()
puts()


文件讀寫

打開并寫入文件

#include <stdio.h>
 
int main()
{
   FILE *fp = NULL;
 
   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}
訪問模式 備注
r 打開一個已有的文本文件,允許讀取文件侈离。
w 打開一個文本文件试幽,允許寫入文件。如果文件不存在卦碾,則會創(chuàng)建一個新文件铺坞。在這里,您的程序會從文件的開頭寫入內(nèi)容洲胖。如果文件存在济榨,則該會被截斷為零長度,重新寫入绿映。
a 打開一個文本文件擒滑,以追加模式寫入文件。如果文件不存在,則會創(chuàng)建一個新文件橘忱。在這里,您的程序會在已有的文件內(nèi)容中追加內(nèi)容卸奉。
r+ 打開一個文本文件钝诚,允許讀寫文件。
w+ 打開一個文本文件榄棵,允許讀寫文件凝颇。如果文件已存在,則文件會被截斷為零長度疹鳄,如果文件不存在拧略,則會創(chuàng)建一個新文件。
a+ 打開一個文本文件瘪弓,允許讀寫文件垫蛆。如果文件不存在,則會創(chuàng)建一個新文件腺怯。讀取會從文件的開頭開始袱饭,寫入則只能是追加模式。

強制類型轉(zhuǎn)換

int sum = 17, count = 5;
double mean;
mean = (double) sum / count;

可變參數(shù)

即函數(shù)輸入數(shù)量不固定
利用stdarg.h 中的va_list呛占、va_start虑乖、va_arg、va_end


內(nèi)存管理

內(nèi)存分配管理函數(shù):在<stdlib.h> 頭文件

  1. void *calloc(int num, int size);
    在內(nèi)存中動態(tài)地分配 num 個長度為 size 的連續(xù)空間晾虑,并將每一個字節(jié)都初始化為 0疹味。它的結(jié)果是分配了 num*size 個字節(jié)長度的內(nèi)存空間,并且每個字節(jié)的值都是0帜篇。

  2. void free(void *address);
    該函數(shù)釋放 address 所指向的內(nèi)存塊,釋放的是動態(tài)分配的內(nèi)存空間糙捺。

  3. void *malloc(int num);
    在堆區(qū)分配一塊指定大小的內(nèi)存空間,用來存放數(shù)據(jù)笙隙。這塊內(nèi)存空間在函數(shù)執(zhí)行完成后不會被初始化继找,它們的值是未知的。

  4. void *realloc(void *address, int newsize);
    該函數(shù)重新分配內(nèi)存逃沿,把內(nèi)存擴展到 newsize婴渡。

內(nèi)存分配示例:
description = (char *)malloc( 200 * sizeof(char) );
calloc(200, sizeof(char));
description = (char *) realloc( description, 100 * sizeof(char) ); // 重新分配內(nèi)存
free(description); // 釋放內(nèi)存


命令行參數(shù)


48頁

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市凯亮,隨后出現(xiàn)的幾起案子边臼,更是在濱河造成了極大的恐慌,老刑警劉巖假消,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柠并,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機臼予,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門鸣戴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人粘拾,你說我怎么就攤上這事窄锅。” “怎么了缰雇?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵入偷,是天一觀的道長。 經(jīng)常有香客問我械哟,道長疏之,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任暇咆,我火速辦了婚禮锋爪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘爸业。我一直安慰自己几缭,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布沃呢。 她就那樣靜靜地躺著年栓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪薄霜。 梳的紋絲不亂的頭發(fā)上某抓,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音惰瓜,去河邊找鬼否副。 笑死,一個胖子當(dāng)著我的面吹牛崎坊,可吹牛的內(nèi)容都是我干的备禀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼奈揍,長吁一口氣:“原來是場噩夢啊……” “哼曲尸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起男翰,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤另患,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蛾绎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昆箕,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡鸦列,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鹏倘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薯嗤。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纤泵,靈堂內(nèi)的尸體忽然破棺而出骆姐,到底是詐尸還是另有隱情,我是刑警寧澤夕吻,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布诲锹,位于F島的核電站繁仁,受9級特大地震影響涉馅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜黄虱,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一稚矿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捻浦,春花似錦晤揣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盗扒,卻和暖如春跪楞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侣灶。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工甸祭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人褥影。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親把还。 傳聞我的和親對象是個殘疾皇子宫蛆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容