天天看點

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

文章目錄

  • 進度:32 / 224
  • 一、C語言概述:13/224
    • 1. 簡潔的C語言
    • 2. Hello world
    • 3. system函數
    • 4. C程式編譯步驟
    • 5. 連結
  • 二、資料類型:29/224
    • 1. 總述
    • 2. 常量定義&進制
    • 3. 資料類型大小
    • 4. 字元&小數
    • 5. 類型限定符&字元串常量
  • 三、運算符與表達式:32/224
    • 1. 運算符類型
    • 2. 運算符優先級

業餘程式員、半吊子程式員和科班最大的差別是什麼?我想答案是 基礎 。

項目 決定 能力 , 基礎 決定 潛力 。

進度:32 / 224

一、C語言概述:13/224

1. 簡潔的C語言

  • 32個關鍵字
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
  • 9種控制語句
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
  • 34種運算符
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

2. Hello world

程式:33.c

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

編譯成 t33:

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

結果:

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

3. system函數

函數說明:

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

程式:34.c

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

編譯成 t34:

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

結果:

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
補充:
  • 把可執行檔案放在

    bin

    檔案中,就可以全局使用
  • system(“ls -a”)有傳回值,可拿

    int

    類型變量接收。

    看下面代碼:(紅色為改動部分)

    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

4. C程式編譯步驟

gcc選項 含義
-o file 指定生成的檔案名為
-E 隻進行預處理
-S 隻進行預處理和編譯
-c 隻進行預處理、編譯和彙編
  1. 預處理: 宏定義展開、頭檔案展開、條件編譯等。删除注釋,但并不檢查文法。

    檔案 --> 預處理檔案

  2. 編譯: 檢查文法,編譯生成彙編檔案。

    預處理檔案 --> 彙編檔案

  3. 彙編:

    彙編檔案 --> 二進制檔案

  4. 連結: 把各種庫連結到最終的可執行程式中

原代碼:37.c

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
  • 預處理:37.i
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
  • 編譯:37.s
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
  • 彙編:37.o
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
  • 連結:t37_elf
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

可執行檔案會被切割,然後放進記憶體不同的區域

記憶體四區:

  1. 代碼區
  2. 資料區
  3. 棧區
  4. 堆區
不僅記憶體有堆棧,一般每個程式也會有獨立的堆棧。

5. 連結

檢視程式所需依賴庫:

Windows

使用

Depends.exe

軟體檢視

Linux

使用

ldd 可執行檔案

MacOS

使用

otool -L 可執行檔案

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

C嵌入彙編語言:

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

二、資料類型:29/224

1. 總述

再回顧一下32個關鍵字:

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

資料類型關鍵字分類:

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
注意: 變量名又稱為【辨別符】

2. 常量定義&進制

  • 方式1:

    const 資料類型 常量名 = 常量值

  • 方式2【宏定義方式】:

    #define 常量名 常量值

    (這種方法下,資料類型會自動配置設定)
補充:
  • 常量名,又稱為隻讀變量
  • 常量名,一般全部大寫

注意:

應該使用方式2,方式1是不安全的,可以通過指針修改

// 二進制:以0b/0B開頭。 【注意】标準的c不包含二進制的寫法,是部分編譯器擴充的文法
int a = 0b10;
// 八進制:以0開頭
int b = 010;
// 十進制
int c = 10
// 十六進制:以0x/0X開頭
int d = 0xA0
           
補充:
  • %d

    按十進制輸出的占位符。
  • %o

    按八進制輸出的占位符。
  • %x

    按十六進制輸出的占位符,會顯示小寫。
  • %x

    按十六進制輸出的占位符,會顯示大寫。
    C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

3. 資料類型大小

  • 資料在計算機中主要以補碼的方式存儲
  • 一個記憶體單元是

    8b

    ,也就是

    1B

  • sizeof()

    :擷取變量所占記憶體大小(機關B)。(傳回值是

    unsigned int

    類型的)

以下不是絕對,和機器環境有關

類型1 類型2 關鍵字 大小(位元組數)
基本類型 整型 short 2
int 4
long 8
long long 8
實型(浮點型) float 4
Double 8
字元型 char 1
指針類型 pointer 8
C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
注意:
  • 大資料給小資料,會溢出。小資料給大資料會自動轉換類型。
  • 定義資料時,若沒指定

    unsigned無符号

    ,預設省略了

    signed有符号

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

4. 字元&小數

輸出字元:

  • %c

    列印字元
  • printf("%c", a)

    相當于

    putchar(a)

  • 'A'

    相當于

    65

    ,說明傳遞的參數是字元的

    ASCII

    值(單引号起到了轉化的作用)

輸入字元:

  • scanf("%c", &變量名)

    ,不止可以接收

    char

    型資料
  • char 變量名 = getchar()

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

%f

預設保留6位小數。

%.2f

意思是保留兩位小數。

%2.d

表示保留兩位整型。在小數點前的這種表示法對

%f

是無效果的

可以用科學計數法指派

float a = 3.2e3f;  // 3.3*10^3
float b = 5.7e-3f;  // 5.7*10^(-3)
           

5. 類型限定符&字元串常量

類型限定符:

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224

字元串就是一段連續的

char

空間 ,以數字0結尾

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
編譯器會在字元串結尾添加結束标志位

\0

三、運算符與表達式:32/224

1. 運算符類型

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
注意:

sizeof

運算符隻要得出的不是0,在

c

中都屬于真值

2. 運算符優先級

C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224
C語言 #Day1 #概述 #資料類型 #運算符&表達式進度:32 / 224一、C語言概述:13/224二、資料類型:29/224三、運算符與表達式:32/224