C語言基礎 2

2021-09-02 18:47:11 字數 4779 閱讀 3204

一、編譯步驟

預處理  -e

編譯 -c

彙編 -s

鏈結二、資料型別(32bit 系統)

基本資料型別:

整型:int(4) short(2) long(4)

字元型:char(1)

浮點型:float(4) double(8)

列舉型:enum 

構造資料型別:

struct 

union

陣列型別

指標型別

void型

1> 資料型別的取值範圍

char (1byte)

取值範圍

unsigned char:                       0~255

signed  char:                        -128~127

eg:char ch = 127;

char ch1 = ch + 1; //-128 

int(4byte)

取值範圍

unsigned int:                        0~2^32-1

signed  int:                        -2^31 ~ 2^31-1

short(2byte)

取值範圍

unsigned short:                        0~2^16-1

signed  short:                        -2^15 ~ 2^15-1

long的取值範圍同int

注意:正數的原碼、反碼、補碼是一樣的;

負數的補碼 = |原碼|取反+1;

2> 常量

常量是指在程式執行期間其數值不發生變化的資料;

整型常量:二進位制 十進位制 十六進製制 八進位制

eg:二進位制:1001110

十進位制:78

十六進製制:0x4e

八進位制:0116

浮點常量:

形式:小數形式  [+/-]m.n

eg:3.1415926  -0.45

指數形式:[+/-]m.n [e/e][+/-]t

eg: -3.5789e-8  等價於  -3.5789*10^(-8)

字元常量:

字元常量是指乙個單一字元, 其表示形式是由兩個單引號包括的乙個字元。                

eg:'a'  '\0'  'wq'(×)

字元常量的值就是該字元的ascii碼值;

字串常量:

字串常量是指用雙引號括起來的一串字元來表示的資料。

eg:"student"  "hello"   "a"   "小明"

標識常量:

是指用識別符號代替常量使用的一種常量, 其名稱通常是乙個識別符號

形式:#define  標識常量名   常量

eg:#define n 10

3> 變數

變數:說明形式:

儲存型別 資料型別 變數名;

儲存型別:auto(自動儲存) static(靜態儲存) register(暫存器) extern

資料型別:同前邊的資料型別

變數名:符合合法的識別符號

eg:int a; //等價於 auto int a;

static int b; //b存在記憶體中的靜態儲存區

register int c;//c儲存在暫存器中

extern int d; //

生命週期及作用域:

區域性變數(棧區):未初始化時,系統賦隨機值

生命週期:從定義開始,到模組結束

作用域:模組內

全域性變數(資料區):未初始化,系統自動賦0

生命週期:從定義開始,到程式結束

作用域:程式內

注意:區域性變數和全域性變數重名時,區域性遮蔽全域性;

static修飾的變數:

區域性變數:(資料區)未初始化時,系統自動賦0

生命週期:從定義開始,到程式結束

作用域:模組內

全域性變數:(資料區)未初始化時,系統自動賦0

生命週期:從定義開始,到程式結束

作用域:程式內

注意:static修飾的全域性變數只能在本檔案中使用,不能在其他檔案用extern宣告;

extern:

注意:1> 至少兩個.c檔案,只有乙個main

2> 編譯時多個.c同時編譯

4> 變數的賦值及初始化

初始化:定義時賦值;

儲存型別 資料型別 變數名 = 初值;

eg:int a = 10;

char ch = 'a';

float f = 12.45;

double e = 2.11;

5> 記憶體圖

6> 資料型別的強制轉換

形式:顯示轉換:

(資料型別名稱)< 表示式 >

eg:int a=22,  b=0 ;

float  c = 24.87,  d= 3.3;

b = (int) (a + c +d) ;    // b存入右邊表示式的計算 結果為50

需要注意的是:

強制型別轉換符後面的表示式如存在複雜運算,就一定要用小括號括起來

強制型別轉換符是一種不安全的轉換,一般都是將高階型別轉換成低階型別,要丟失資料的精度;

強制型別轉換並不改變表示式中變數的資料型別和其值。

隱式轉換:

二、表示式

1、表示式

由運算子、運算量及標點符號組成的序列;

eg:i++

a = b

a == b

a>b?a:b

a += 3, b = a

2、表示式語句

《表示式》 ;

eg:i++;

a = b;

int a;

三、運算子

1、算數運算子:(+ - * / % ++ --)

%:兩邊的運算量必須是整數

++:自增運算子

eg:int a = 10;

//a++; //a++ 表示式的值是10, a自身的值為11

++a; //++a 表示式的值是11, a自身的值為11

--:自減運算子

eg:int a = 10;

//a--; //a-- 表示式的值是10, a自身的值為9

--a; //--a 表示式的值是9, a自身的值為9

2、關係運算子(> < >= <= == !=)

注意:==(判斷)  與 =(賦值)

eg:int i = 20;

if(10 = i)

printf("i=10\n");

else

printf("else\n");

3、邏輯運算子(&& || !)

注意:運算量有兩個 0和1

1> &&:(一假為假)

運算量           運算量            結果

0                 0                0

1                 0                0

1                 1                1

0                 1                0

例如,int  x=5, y=18;

(x>=5) && (y<20)            結果值為1

((x+1)>=0) && (y<17)          結果值為0

((x-8)>=0) && (y==18)          結果值為0

((x-5)>0)  && (y!=18)        結果值為0

注意:&&運算子的短路現象,即&&左邊的表示式的值為0時,右邊表示式不會做運算;

2> ||:(一真為真)

運算量           運算量            結果

0                 0                0

1                 0                1

1                 1                1

0                 1                1

注意:||運算子的短路現象,即||左邊的表示式的值為1時,右邊表示式不會做運算;

3> !:邏輯非

運算量         結果

0             1

1             0

注意:非0 即真;

eg:例如,

int  k=8;

! ( k ==0)     結果值為1

! ((k-8) == 0)   結果值為0

! (k<= 0)     結果值為1

4、位運算子(~ & | ^ << >>)

注意:運算之前將運算量化為二進位制運算;

1>~:

eg:unsigned char  x=0x17, y;

y = ~x  ; 

2> &

eg:unsigned char x = 0x23;

unsigned char y = 0x56;

unsigned char z = x & y;

printf("z=%x\n",z); //0x02

3> | 

eg:unsigned char x = 0x23;

unsigned char y = 0x56;

unsigned char z = x | y;

printf("z=%x\n",z); //0x77

C語言基礎 2

1.正數的反碼,補碼都等於原碼 負數的補碼等於反碼加一。例 31的補碼 1 原碼 1001 1111 2 反碼 1110 0000 3 補碼 1110 0001 2.計算機中儲存資料用補碼主要是因為 0這個數的原碼和反碼不唯一,出現了bug,而 0補碼是一致的。3.字串以 0 結尾。字元常量 x 字...

c語言基礎2

陣列 定義 型別說明符 陣列名 常量表示式 例如int a 10 陣列中十個元素位元組位址是連續的,10代表陣列的長度,0 9是陣列的下標 在陣列的位址中,由a 0 到a 9 中位址是從低位址到高位址。求陣列中元素的個數大多使用 sizeof a sizeof a 0 關於陣列位址的問題 a 0 代...

C語言基礎 2

迴圈 loop if語句被叫做條件控制結構,因為它可以在前提條件成立的情況下執行語句。因為這個原因,if也被認為是決策結構。語法如下 if 表示式 expression 執行語句 statements 具體例子 include intmain 以上 用python可以寫成一下樣子 score 89i...