C語言基礎(chǔ)知識(shí)

C語言基礎(chǔ)

編譯程序

  1. gcc xx.c,他會(huì)默認(rèn)生成a.out的可執(zhí)行文件,在a.out所在目錄,執(zhí)行./a.out
  2. gcc xx.c -o xx,生成一個(gè)xx可執(zhí)行文件,注意不要命名成xx.c,這樣會(huì)覆蓋原先xx.c文件內(nèi)容
  3. gcc xx.c -o xx -g -Wall的意思是開啟所有的語法警告
  4. gcc之檢查語法錯(cuò)誤
  5. 每次修改完,c程序都必須要執(zhí)行一次gcc
  • /如果覺得gcc太麻煩,寫一個(gè)shell腳本/

hell world程序

int main()
{
    return 0;
}

  1. 可執(zhí)行程序一執(zhí)行菱农,就會(huì)找一個(gè)叫做main的函數(shù)然后運(yùn)行main大括號(hào)里面的語句
  2. 一個(gè).c文件有且只能有一個(gè)main的函數(shù)
  3. 如果一個(gè)函數(shù)碰到return這個(gè)單詞就代表這個(gè)函數(shù)運(yùn)行結(jié)束.return后面的語句將永遠(yuǎn)不會(huì)被執(zhí)行.
  4. 如果是main函數(shù),他可將前面int省略.return也是可以省略的.
  5. main(int argc,char *argv[])
  6. include<stdio.h>是一個(gè)C語言標(biāo)準(zhǔn)輸入輸出庫(kù).

注釋

  1. //代表單行注釋
  2. /* code/注釋多行:注意:/ * /*/ 第一個(gè)/ *會(huì)遇到第一個(gè) * /匹配

注釋使用情況

  1. 注釋代碼
  2. 解釋代碼
  3. 寫清楚文件名,文件產(chǎn)權(quán)copyright,文件制作者,如果是某人:要寫清聯(lián)系方式

printf

  • 打印函數(shù):打印雙引號(hào)""里面的語句,\n:轉(zhuǎn)義字符,代表?yè)Q行

代碼格式

main()
{
    
    
}

  • 注意:每碰到一個(gè){,就要換行,再來一個(gè)tab鍵.

常量

  1. 1,2,3,4:整型常量
  2. 'a','b','c','d':字符常量
  3. 1.2,2.2:浮點(diǎn)常量
  4. "hello world":字符串常量
  5. 0xff1:地址常量

常量的特性

  1. 常量不會(huì)改變
  2. 常量不能作為左值
  3. 8,const(只讀常量),define(宏常量)

變量

變量的特點(diǎn)

  1. 可以改變的量
  2. 可以作為左值,也可以作為右值

變量的定義

  • 在shell腳本里:變量名=值
  • 在C語言里面:數(shù)據(jù)類型+變量名;
  • 同時(shí)定義多個(gè)同種類型的變量;數(shù)據(jù)類型 變量1,變量2;

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

  1. 整型數(shù)據(jù)類型:int
  2. 字符數(shù)類型:char
  3. 浮點(diǎn)類型:float(單精度),double(雙精度)
  4. float類型的變量精確到7位

數(shù)據(jù)類型的作用

  1. 標(biāo)志著后面的變量具體是接收什么類型的值
  2. 這個(gè)變量在內(nèi)存中占幾個(gè)字節(jié)
  • int:4
  • char:1
  • float:4
  • double:8

整型變量

  1. int value=8;
  2. int value;value=8;

字符變量

  1. char ch='c';
  2. char ch;ch='d';

浮點(diǎn)變量

  1. float f1=1.2;
  2. float f1;f1=1.2;

變量的使用

  1. int value;value=8;

標(biāo)識(shí)符的命名規(guī)范

硬性規(guī)范

  1. 不能用數(shù)字開頭
  2. 只能由字母,下劃線好數(shù)字組成
  3. 不能與C語言關(guān)鍵字相同

建議規(guī)范

  1. 不能用拼音,多查字典
  2. 盡量使用駝峰命名法:numOfStudent,或者num_of_student
  3. 見名知義

printf具體用法

int a=6;
float=9.8;
printf("a=%d,b=%f\n",a,b);
  1. %m.nf
  • m<=n+1+整數(shù)實(shí)際部位的位數(shù),m無效
  • m>n+1+整數(shù)實(shí)際部分的位數(shù),m有效,左邊以空格補(bǔ)全

地址

  1. 內(nèi)存:字節(jié):Byte是計(jì)算機(jī)存儲(chǔ)的最小單位.
  2. 1M=1024KB,1KB=1024Byte纸淮,1Byte=8bit
  • 位:bit:一個(gè)字節(jié)占八位
  • 地址:是每一個(gè)字節(jié)所對(duì)應(yīng)的編號(hào)

進(jìn)制

  1. 二進(jìn)制:0~1:以0B,0b開頭
  2. 八進(jìn)制:0~7:以0開頭:
  3. 十進(jìn)制:0~9
  4. 十六進(jìn)制:0~ f,或者0~F:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f:0x開頭

大端小端存儲(chǔ)法

小端法

  • 低位上的數(shù)存儲(chǔ)在低的地址所對(duì)應(yīng)的字節(jié)

大端法

  • 低位上的數(shù)存儲(chǔ)在高的地址所對(duì)應(yīng)的字節(jié)
  • 用處:一般網(wǎng)絡(luò)傳輸內(nèi)的時(shí)候

打印特殊字符

  1. ":\ " printf(""shangqian"\n");
  2. ':' '或'printf("'shangqian'\n");
  3. %:%% printf("%%%d\n",a);
  4. \ :\ \ printf("%d\ \n",a);

字符與ASCII編碼

  1. 字符是一個(gè)特殊的整型,占8位
  2. '\0'=0,' '=32,'0'=48 'A'=65 'a'=97
  3. 全球unicode

scanf

  1. 基本用法
#include "stdio.h"
int main()
{
    int a呐舔;
    scanf("%d",&a);
    printf("a=%d\n",a);
    returnn 0;
}
  • 注意點(diǎn) scanf,后面必須是取變的地址
  • 一個(gè)變量必須先定義出來再進(jìn)scanf
  • 不要在scanf里多弄花樣潜索。
  1. 同時(shí)輸入多個(gè)變量
scanf("%d%d",&a,&b);
  1. %d,%f,%c,%lf.%lf是輸入double類型的數(shù)據(jù)

getchar()和putchar()

char ch;
ch=getchar();
putchar(ch);
putchar('\n');
//printf("ch=%c\n",ch);

數(shù)據(jù)類型轉(zhuǎn)換

  1. 隱式轉(zhuǎn)換:精度小的===>精度大的
    char===>short int===>int===>float===>double
  2. 強(qiáng)制類型轉(zhuǎn)換: (數(shù)據(jù)類型)變量/常量
int a=9;
int b=8;
float c=(float)a/b;
printf("c=%f\n",c);

運(yùn)算符

  1. 注意點(diǎn):計(jì)算機(jī)只進(jìn)行相同類型數(shù)據(jù)運(yùn)算,最后算出來的結(jié)果也與他們相同的數(shù)據(jù)類型
    2.隱式轉(zhuǎn)換:精度小的===>精度大的
    char===>short int===>int===>float===>double

算數(shù)運(yùn)算符

  1. +     -   *  /   %  ++
    
  2. %:%左右兩邊的數(shù)都是整數(shù)
  • 后綴++ 前綴++ 前綴-- 后綴--

位運(yùn)算符

1.|:

3:0011
5:0101
|:為0111 為7
  1. &:
3:0011
5:0101
&:0001 為1

  1. ^:
3:0011
5:0101
^ 0110 為6
  1. ~:按位取反
3:0011
~:1100 為-4

  • +7
  1. 原碼:0000 0111
  2. 反碼:0000 0111
  3. 補(bǔ)碼:0000 0111
  • -7
  1. 原碼:1000 0111
  2. 反碼:1111 1000
  3. 補(bǔ)碼:1111 1001
  • 數(shù)據(jù)在內(nèi)存中是以數(shù)據(jù)的補(bǔ)碼形式存在.
  • 正數(shù)取反
  1. +7
  • 原碼: 0000 0000 0000 0000 0000 0000 0000 0111
  • 反碼:0000 0000 0000 0000 0000 0000 0000 0111
  • 補(bǔ)碼:0000 0000 0000 0000 0000 0000 0000 0111
  • 取反補(bǔ)碼:1111 1111 1111 1111 1111 1111 1111 1000
  • 反碼為:1111 1111 1111 1111 1111 1111 1111 0111
  • 原碼為:1000 0000 0000 0000 0000 0000 1000
  • +7取反為-8
    2.-7
  • 原碼: 1000 0000 0000 0000 0000 0000 0000 0111
  • 反碼:1111 1111 1111 1111 1111 1111 1111 1000
  • 補(bǔ)碼:1111 1111 1111 1111 1111 1111 1111 1001
  • 取反補(bǔ)碼為:000 0000 0000 0000 0000 0000 0110
  • 反碼:000 0000 0000 0000 0000 0000 0110
  • 補(bǔ)碼:000 0000 0000 0000 0000 0000 0110
  • 結(jié)果:-7取反為+6

左移

正數(shù)左移

  • 3左移兩位
  • 原碼:0000 0011
  • 反碼:0000 0011
  • 補(bǔ)碼:0000 0011
  • 左移兩位補(bǔ)碼為:0000 1100
  • 反碼為:0000 1100
  • 原碼為:0000 1100
  • 結(jié)果為12

正數(shù)右移

  • 3右移兩位
  • 原碼為0000 0011
  • 反碼:0000 0011
  • 補(bǔ)碼:0000 0011
  • 右移兩位補(bǔ)碼為:0000 0000

負(fù)數(shù)左移

  • -3左移兩位
  • 原碼:1000 0011
  • 反碼:1111 1100
  • 補(bǔ)碼:1111 1101
  • 左移兩位補(bǔ)碼為:1111 0100
  • 反碼為:1111 0011
  • 原碼為:1000 1100
  • 結(jié)果為-12

負(fù)數(shù)右移:以符號(hào)位補(bǔ)全

  1. -3右移兩位
  • 原碼:1000 0011
  • 反碼:1111 1100
  • 補(bǔ)碼:1111 1101
  • 右移兩位補(bǔ)碼為:1111 1111
  • 反碼為:1111 1110
  • 原碼為:1000 0001
  • 結(jié)果為-1
  1. -6右移兩位
  • 原碼:1000 0110
  • 反碼:1111 1001
  • 補(bǔ)碼:1111 1010
  • 右移兩位補(bǔ)碼為:1111 1110
  • 反碼為:1111 1101
  • 原碼為:1000 0010
  • 結(jié)果為-2

char:占1個(gè)字節(jié)

  • 表示范圍為-128~127
char ch=128;
printf("ch=%d\n",ch);

  • 結(jié)果為-128
char ch=129;
printf("ch=%d\n",ch);

  • 結(jié)果為-127

unsigned char

unsigend char a=-1;
printf("a=%d\n",a);

  • 結(jié)果為:a=255;
  • -1的原碼:1000 0001
  • -1的反碼:1111 1110
  • -1的補(bǔ)碼:1111 1111
  • 由于unsigne char 是無符號(hào)數(shù),所以不用再回原碼,直接取補(bǔ)碼;

賦值運(yùn)算符

num+=i==>num=num+i;
num>>=2==num=num>>2;

計(jì)算數(shù)據(jù)類型所占字節(jié)長(zhǎng)度

  • printf中%p是打印地址
  • printf("int所占字節(jié)長(zhǎng)度=%ld\n",sizeof((num)));

關(guān)系運(yùn)算符

  • <, >, >= , <= ,!= , ==
  • 在計(jì)算當(dāng)中,關(guān)系運(yùn)算符構(gòu)成的運(yùn)算,我們可以看成一個(gè)事件,如果這個(gè)事件成立,其結(jié)果(邏輯結(jié)果[0/1])1,如果事件不成立,其結(jié)果為0;

邏輯運(yùn)算符

  1. 事件1&&事件2:并且,事件1成立并且事件2也成立,整個(gè)邏輯結(jié)果才為1;否則,整個(gè)邏輯結(jié)果為0;
  2. 事件1||事件2:或者,事件1成立或者事件2也成立,整個(gè)邏輯結(jié)果才為1;否則,整個(gè)邏輯結(jié)果為0;
  3. !事件:非,如果事件成立,邏輯結(jié)果為1,!1,整個(gè)結(jié)果為0;否則,邏輯結(jié)果為1.
  • 進(jìn)階:事件1&&事件2:如果事件1不成立,就不會(huì)執(zhí)行&&后面的運(yùn)算.
  • 事件1||事件2:如果事件1成立,就不會(huì)執(zhí)行||后面的運(yùn)算.
  • 5>3&&8<4-!0 >1.
    5>3為1,!0為1,4-!0=3,8<3=0,1&&0=0;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锦聊,一起剝皮案震驚了整個(gè)濱河市团赁,隨后出現(xiàn)的幾起案子雨席,更是在濱河造成了極大的恐慌亚皂,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柱宦,死亡現(xiàn)場(chǎng)離奇詭異些椒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掸刊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門免糕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忧侧,你說我怎么就攤上這事石窑。” “怎么了苍柏?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵尼斧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我试吁,道長(zhǎng)棺棵,這世上最難降的妖魔是什么楼咳? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮烛恤,結(jié)果婚禮上母怜,老公的妹妹穿的比我還像新娘。我一直安慰自己缚柏,他們只是感情好苹熏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著币喧,像睡著了一般轨域。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杀餐,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天干发,我揣著相機(jī)與錄音,去河邊找鬼史翘。 笑死枉长,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的琼讽。 我是一名探鬼主播必峰,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼钻蹬!你這毒婦竟也來了吼蚁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤脉让,失蹤者是張志新(化名)和其女友劉穎桂敛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溅潜,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年薪伏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滚澜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嫁怀,死狀恐怖设捐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塘淑,我是刑警寧澤萝招,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站存捺,受9級(jí)特大地震影響槐沼,放射性物質(zhì)發(fā)生泄漏曙蒸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一岗钩、第九天 我趴在偏房一處隱蔽的房頂上張望纽窟。 院中可真熱鬧,春花似錦兼吓、人聲如沸臂港。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽审孽。三九已至,卻和暖如春浑娜,著一層夾襖步出監(jiān)牢的瞬間佑力,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工棚愤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搓萧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓宛畦,卻偏偏與公主長(zhǎng)得像瘸洛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子次和,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • 1.編譯程序(1)gcc xx.c,他會(huì)默認(rèn)生成一個(gè)a.out的可執(zhí)行文件反肋,在a.out所在目錄,執(zhí)行./a.o...
    萌面大叔2閱讀 1,284評(píng)論 0 1
  • 1.編譯程序 (1)gcc xx.c,他會(huì)默認(rèn)生成一個(gè)a.out的可執(zhí)行文件踏施,在a.out所在目錄石蔗,執(zhí)行./a....
    萌面大叔2閱讀 469評(píng)論 0 1
  • ?1 C語言程序的結(jié)構(gòu)認(rèn)識(shí) 用一個(gè)簡(jiǎn)單的c程序例子,介紹c語言的基本構(gòu)成畅形、格式养距、以及良好的書寫風(fēng)格,使讀者對(duì)c語...
    CONLYOUC閱讀 8,706評(píng)論 9 66
  • C語言預(yù)課 字節(jié)講解 大端存儲(chǔ)法:在高位存儲(chǔ)低字節(jié)小端存儲(chǔ)法:在低位存儲(chǔ)高字節(jié) ASC碼表——共255個(gè)字符 ‘\...
    I踏雪尋梅閱讀 501評(píng)論 0 0
  • 國(guó)慶假期,看著一波波出行大軍竖席,結(jié)伴而游耘纱,心里唯有向往,羨慕的份了毕荐。一部相機(jī)束析,幾件行囊,說走就走的旅行憎亚,已被...
    文_女子閱讀 839評(píng)論 0 2