【C语言】 C 语言 关键字分析 ( 属性关键字 | 常量关键字 | 结构体关键字 | 联合体关键字 | 枚举关键字 | 命名关键字 | 杂项关键字)
相關文章鏈接 :
1.【嵌入式開發】C語言 指針數組 多維數組
2.【嵌入式開發】C語言 命令行參數 函數指針 gdb調試
3.【嵌入式開發】C語言 結構體相關 的 函數 指針 數組
4.【嵌入式開發】gcc 學習筆記(一) - 編譯C程序 及 編譯過程
5.【C語言】 C 語言 關鍵字分析 ( 屬性關鍵字 | 常量關鍵字 | 結構體關鍵字 | 聯合體關鍵字 | 枚舉關鍵字 | 命名關鍵字 | 雜項關鍵字)
文章目錄
- 一. 屬性關鍵字 (auto | static | register)
- 1. auto 關鍵字
- (1) auto 關鍵字說明 ( 默認屬性 | 聲明棧存儲 | 只能修飾局部變量 [ 全局變量在全局區存儲 , auto 在棧內存中 ] )
- (2) auto 關鍵字 代碼示例 ( 不能修飾全局變量 | 錯誤示例 )
- (3) auto 關鍵代碼示例 ( 正確用法 )
- 2. static 關鍵字
- (1) static 關鍵字說明 ( ① 聲明靜態屬性 存儲于靜態區 [ 修飾局部變量 ] | ② 文件作用域限定符 [ 修飾全局變量 和 函數 ] )
- (2) static 關鍵字 代碼示例 ( 修飾局部變量 )
- (3) static 關鍵字 代碼示例 ( 限定變量和方法 作用域 )
- 3. register 關鍵字
- (1) register關鍵字說明 ( 聲明寄存器存儲 ( 不確定 ) | 適用前提 ① 值符合CPU要求 ② 不能用 & 取地址 , & 只能取內存地址 不能取 CPU 地址 )
- (2) register 關鍵字代碼示例 ( 不能修飾全局變量 | 錯誤示例 )
- (3) register 關鍵字代碼示例 ( 不能獲取register變量地址 | 錯誤示例 )
- 4. 屬性關鍵字綜合示例
- 二. 其它關鍵字 ( goto | void | extern | sizeof)
- 1. goto 關鍵字 ( 不建議使用 )
- 2. void 關鍵字
- (1) void 關鍵字說明 ( 修飾 返回值 和 參數 | 本質 代表 沒有 )
- (2) void * 指針介紹 ( 被賦值 [ 左值 ] 時可以被賦值為任意指針類型變量 | 右值 賦值給其它類型變量時 需要將 void* 指針強轉為被賦值的類型 )
- (3) void * 指針 代碼示例 ( 實現 memset 方法 )
- 3. extern 關鍵字
- (1) extern 關鍵字說明 ( 聲明外部文件的 變量 和 函數 | 設置編譯方式 C++ 中 命令編譯器 以 標準 C 規范編譯 變量 和 函數 )
- (2) extern 引用外部文件示例 ( 聲明外部變量 : extern 類型 變量名稱; | 聲明外部函數 : extern 返回值類型 函數名稱 ( 參數列表 ) ; )
- (3) extern 關鍵字代碼示例 ( 編譯方式 )
- 4. sizeof 關鍵字
- (1) sizeof 關鍵字說明 ( 本質 不是函數 是 編譯器 指示符 | 編譯過程中得到結果 | 計算變量 或 類型 占用內存大小 )
- 三. 常量 和 易變 關鍵字 ( const | volatile )
- 1. const 關鍵字 簡介
- (1) const 關鍵字 簡介 ( 左數右指 | 修飾制度變量 | 生成常量符號表 )
- (2) const 關鍵字 代碼示例 ( const 常量不能被賦值 | 錯誤示例)
- (3) const 關鍵字 代碼示例 ( 通過指針修改const常量 : 獲取 const 變量的地址, 并改變該地址的值 )
- (4) const 關鍵字 代碼示例 ( 修飾指針 | 錯誤示例 )
- ( 5 ) const 關鍵字 代碼示例 ( 修飾返回值 )
- 2. volatile 關鍵字 簡介
- (1) volatile 關鍵字 簡介 ( 告訴編譯器 每次去內存中取變量值 | )
- (2) volatile 關鍵字 代碼示例
- 四. 結構體 聯合體 關鍵字 ( struct | union )
- 1. struct 關鍵字
- (1) 結構體定義 使用 ( ① 結構體定義 : struct 結構體名稱 {}; | ② 結構體變量聲明 : struct 結構體名 變量名 ; | ③ 定義結構體同時聲明結構體變量 : struct 結構體名稱 {} 變量名 ; | ④ 結構體定義別名 : typedef struct 結構體名稱 {} 別名名稱; 聲明變量 : 別名名稱 變量名稱 ; [ 定義一個別名后, ] | ⑤ 結構體定義別名省略結構體名稱 : typedef struct {} 別名名稱; 聲明變量 : 別名名稱 變量名稱 ; )
- (2) struct 結構體大小
- (3) struct 結構體實現柔性數組
- (4) 柔性數組 代碼示例 ( 處理斐波那契數列 )
- 3. union 聯合體 關鍵字
- (1) struct 和 union 的區別 ( struct 為每個元素分配獨立空間 | union 只為最大的元素分配內存空間 所有元素共享該空間 )
- (2) union 聯合體注意事項 ( 受大小端影響 )
- 五. 枚舉 關鍵字 ( enum )
- 1. enum 關鍵字
- (1) enum 枚舉關鍵介紹 ( 定義常量 | 只能定義 int 類型 )
- (2) enum 枚舉代碼示例
- (3) enum 和 define 區別 ( #define 編譯時進行替換 | enum 是常量值 )
- 2. typedef 關鍵字
- ( 1 ) typedef 關鍵字介紹 ( 給已有類型重新命名 | 沒有新類型 | 無法擴展 )
一. 屬性關鍵字 (auto | static | register)
每個C語言變量都有自己的屬性.
定義變量時可以在變量前加上 “屬性關鍵字” 來為變量定義屬性.
auto 關鍵字 : auto 是C語言變量的默認屬性, 所有的局部變量都被編譯器默認為 auto 屬性. 存儲在棧中.
static 關鍵字 : 聲明靜態, 限定作用域. 存儲在靜態存儲區.
register關鍵字 : 聲明存儲在 CPU 寄存器中. 存儲在CPU寄存器中.
1. auto 關鍵字
(1) auto 關鍵字說明 ( 默認屬性 | 聲明棧存儲 | 只能修飾局部變量 [ 全局變量在全局區存儲 , auto 在棧內存中 ] )
auto 關鍵字 :
- 1.C語言默認屬性 : 如果一個變量前沒有寫明屬性, 那就是默認為 auto 的屬性;
- 2.聲明棧存儲 : 使用auto修飾的變量, 會默認存儲在程序的棧中.
- 3.只能修飾局部變量 : auto 關鍵字只能修飾局部變量, 修飾全局變量編譯時會報錯.
>**auto不能修飾全局變量** : auto 關鍵字不能修飾全局變量, 因為 ***auto 修飾的變量存儲在棧內存中, 全局變量存儲在全局區, 此時出現了沖突***. 如果使用auto修飾全局變量, 編譯時會報錯.
存儲類型說明 : C 語言中的變量存儲 由上到下順序 : 棧區(stack) -> 堆區(heap) -> 全局區 -> 字符常量區 -> 代碼區
(2) auto 關鍵字 代碼示例 ( 不能修飾全局變量 | 錯誤示例 )
auto 關鍵字只能修飾局部變量, 修飾全局變量會報錯 :
- 1.代碼 : test_1.c .
- 2.編譯結果 : 提示全局變量不能使用 auto 關鍵字聲明.
(3) auto 關鍵代碼示例 ( 正確用法 )
正確使用 auto 關鍵字 :
- 1.代碼 :
- 2.執行結果 : 打印出了棧內存中的地址.
2. static 關鍵字
(1) static 關鍵字說明 ( ① 聲明靜態屬性 存儲于靜態區 [ 修飾局部變量 ] | ② 文件作用域限定符 [ 修飾全局變量 和 函數 ] )
static 關鍵字兩大作用 :
- 1.靜態屬性 : static 修飾局部變量 指明變量是靜態的, 該變量存儲在程序靜態區.
- 2.作用域限定符 : static 作為 文件作用域限定符.
static 修飾局部變量(聲明靜態存儲區) :
- 1.作用 : 說明該局部變量存儲在靜態存儲區.
- 2.初始化次數 : 該值只會***初始化一次***, 之后會被不斷賦值, 調用該局部變量所在方法, 每次的值都是上次調用該方法計算完畢后的值. 如果是第一次調用, 那么就初始化這唯一的一次.
- 3.聲明周期 : 該局部變量的生命周期***從第一次初始化直到程序退出為止***.
static 修飾全局變量和函數(聲明作用域) :
- 1.修飾全局變量 : static 如果修飾全局變量, 那么就說明該全局變量只能在本文件中使用, 其它文件無法訪問.
- 2.修飾函數 : static 如果修飾函數, 那么該函數只能
存儲類型說明 : C 語言中的變量存儲 由上到下順序 : 棧區(stack) -> 堆區(heap) -> 全局區 -> 字符常量區 -> 代碼區
(2) static 關鍵字 代碼示例 ( 修飾局部變量 )
static 關鍵字修飾局部變量, 只初始化一次, 之后每次使用, 都不再進行初始化操作.
static 修飾局部變量示例 : 兩個方法中各有一個變量, 一個靜態, 一個auto, 分別調用5次方法,進行對比.
- 1.代碼 :
- 2.執行結果 :
分析 :
調用5次method1()方法, 每次local_variable_auto 變量都初始化.
調用5次method2()方法, local_variable_static 變量只初始化一次, 之后每次都沿用上一次的值.
(3) static 關鍵字 代碼示例 ( 限定變量和方法 作用域 )
static 關鍵字 限定變量 只能在本代碼中訪問被修飾的變量和函數 :
- 1.代碼1 : 主程序 test_1.c ;
- 2.代碼2 : 外部文件 test_2.c ;
- 3.執行結果 : 需要同時編譯兩個文件 gcc test_1.c test_2.c ;
3. register 關鍵字
(1) register關鍵字說明 ( 聲明寄存器存儲 ( 不確定 ) | 適用前提 ① 值符合CPU要求 ② 不能用 & 取地址 , & 只能取內存地址 不能取 CPU 地址 )
register 關鍵字說明 :
- 1.作用 : 聲明變量存儲的位置是在 寄存器 中.
- 2.成功率 : 該關鍵字只是請求編譯器將該變量存儲在寄存器中, 編譯器不一定會批準.
- 3.不能修飾全局變量 : register 修飾全局變量會報錯, 因為全局變量聲明周期是整個程序的聲明周期,該周期內長時間占用 CPU 寄存器明顯不可能, 因此編譯器禁止register修飾全局變量.
register 使用前提 :
- 1.值符合要求 : 該變量的值必須能夠被 CPU 的寄存器接受.
- 2.無法獲取地址 : 取地址運算符 & 不能獲取 register 變量地址, & 只是能獲取內存地址, 不能獲取 CPU 地址.
使用情況 : 當需求是***實時性要求效率非常高***時, 就應該使用寄存器變量.
(2) register 關鍵字代碼示例 ( 不能修飾全局變量 | 錯誤示例 )
register 不能修飾全局變量 : CPU 寄存器內的變量其生命周期不能太長.
- 1.代碼 : test_1.c ;
- 2.執行結果 : register修飾全局變量報錯;
(3) register 關鍵字代碼示例 ( 不能獲取register變量地址 | 錯誤示例 )
register 變量無法獲取地址 :
- 1.代碼1 : test_1.c .
- 2.執行結果 :
4. 屬性關鍵字綜合示例
屬性關鍵字綜合示例 :
- 1.代碼1 : test_1.c;
- 2.代碼2 : test_2.c ;
- 3.執行結果 :
二. 其它關鍵字 ( goto | void | extern | sizeof)
1. goto 關鍵字 ( 不建議使用 )
goto 現狀 (建議禁用) : 一般不使用 goto;
- 1.對程序質量影響 : 程序中使用的 goto 越多, 代碼質量越垃圾;
- 2.禁用 goto : goto 對代碼質量產生惡劣影響, 高手寫代碼一般不使用 goto;
- 3.后續高級語言刪除了 goto : 后續的 Java 等高級語言中, 沒有 goto 關鍵字;
- 4.原因 : 破壞了 過程式 程序順序執行 的規則;
2. void 關鍵字
(1) void 關鍵字說明 ( 修飾 返回值 和 參數 | 本質 代表 沒有 )
void 關鍵字作用 : 修飾函數 返回值 和 參數;
- 1.修飾返回值 : 函數 沒有返回值, 其類型就應該寫成 void;
- 2.修飾參數 : 如果函數 沒有參數, 即不接收參數, 其參數類型就寫成 void;
- 3.本質 : 使用 void 修飾 返回值 和 參數, 其本質就代表沒有;
void 類型大小C語言規范沒有規定, C 語言中是沒有 void 變量的. 使用sizeof查看void大小, gcc 返回1 這是編譯器廠商給的一個值, 不是C語言中規定的.
void 不能修飾變量, 否則會報錯.
(2) void * 指針介紹 ( 被賦值 [ 左值 ] 時可以被賦值為任意指針類型變量 | 右值 賦值給其它類型變量時 需要將 void* 指針強轉為被賦值的類型 )
void * 指針說明 :
- 1.被賦值的情況(作為左值) : void * 指針作為被賦值對象, 即在 “=” 左側, 其可以 直接被賦值為任何指針類型變量;
- 2.賦值給其它指針(作為右值) : void * 賦值給其它類型的指針變量, 需要強制轉換為其它類型的指針變量.
(3) void * 指針 代碼示例 ( 實現 memset 方法 )
使用 void * 指針實現 memset 方法示例 :
- 1.代碼示例 : test_1.c ;
- 2.執行結果 :
3. extern 關鍵字
(1) extern 關鍵字說明 ( 聲明外部文件的 變量 和 函數 | 設置編譯方式 C++ 中 命令編譯器 以 標準 C 規范編譯 變量 和 函數 )
extern 關鍵字說明 :
- 1.主要作用 : 聲明外部文件中定義的 變量 和 函數;
- 2.設置編譯方式 : 有些 C ++ 編譯器 和 一些 變種 C 編譯器 編譯變量 和 函數時有時不遵守標準C 規范, 通過 extern 關鍵字可以***命令編譯器以 標準C 規范編譯 變量和函數***.
(2) extern 引用外部文件示例 ( 聲明外部變量 : extern 類型 變量名稱; | 聲明外部函數 : extern 返回值類型 函數名稱 ( 參數列表 ) ; )
extern 引用外部文件 :
- 1.代碼示例1 : test_1.c ;
- 2.代碼示例2 : test_2.c ;
- 3.執行結果 :
(3) extern 關鍵字代碼示例 ( 編譯方式 )
extern 指定編譯方式代碼示例 :
- 1.代碼示例 : test_1.c ;
- 2.執行結果 :
4. sizeof 關鍵字
(1) sizeof 關鍵字說明 ( 本質 不是函數 是 編譯器 指示符 | 編譯過程中得到結果 | 計算變量 或 類型 占用內存大小 )
sizeof 關鍵字說明 :
- 1.sizeof 本質 : sizeof 不是函數, 其本質是一個編譯器的內置的指示符;
- 2.sizeof 確定值的時機 : sizeof 的實際值值, 在***編譯的過程中就已經知道了結果***.
- 3.sizeof 作用 : 計算變量或者類型 等實體 占用內存的大小.
###(2) sizeof 關鍵字 代碼示例 ( 使用方法 )
sizeof 關鍵字 代碼示例 :
- 1.代碼示例 :
- 2.執行結果 :
三. 常量 和 易變 關鍵字 ( const | volatile )
1. const 關鍵字 簡介
(1) const 關鍵字 簡介 ( 左數右指 | 修飾制度變量 | 生成常量符號表 )
const 關鍵字 說明 :
- 1.const 常量本質 : const 不是真的常量, 也是一種變量.
- 2.修飾只讀變量 : const 修飾的變量智能讀取, 不能被賦值, 即不能當做左值;
- 3.占用內存 : const 變量也會占用內存中的空間 ;
- 4.修改const值 : 使用指針可以修改const變量地址中的值.
const 只是針對編譯器是有用的, 在運行的時候 就沒有這種約束了, 可以改變其值.
編譯器處理 const 常量過程 :
- 1.定義 const 常量 : const int const_variable = 666, 之后編譯器開始編譯;
- 2.生成符號表 : 編譯器生成一個符號表, const_variable 對應 int 類型, 值為 666;
| const_variable | int | 666 |
- 3.編譯器左值判定 : 編譯器查找const常量是否有左值, 如果有報錯;
- 4.編譯器右值判定 : 編譯器查找 const 常量是否當做右值,如果出現 int a = const_variable, 那么直接將 const_variable 替換為 666; 如果出現 int p = (int) &const_variable, 那么不做任何操作;
const 修飾數組 :
- 1.只讀數組 : const 修飾數組時, 這個數組是只讀的, 數組中的每個元素都是只讀的, 不能作為左值;
- 2.const 數組所在空間不可改變 : 數組所在的空間是不可更改的, 但是通過指針是可以修改數組中每個元素的值的;
const 修飾指針 : 需要符合下面的規則 :
| const int* p | p指針地址可變 p指針指向的內容不可變 (const 在 * 左邊, 數據不可變) |
| int const* p | p指針地址可變 p指針指向的內容不可變 (const 在 * 左邊, 數據不可變) |
| int* const p | p指針地址不可變 p指針指向的內容不可變 (const 在 * 右邊, 地址不可變) |
| const int* const p | p指針地址不可變 p指針指向的內容不可變 (const 在 * 左邊 和 右邊, 數據和地址都不可變) |
>**const 修飾指針規則** : ***左數 右指 (左邊數據是常量, 右邊指針是常量)***; >**左數** : ***const 出現在 * 左邊時, 指針指向的數據為常量***, 指向的數據不可改變; >**右指** : ***const 出現在 * 右邊時, 指針地址本身是常量***, 指針地址不可改變;
const 修飾函數參數 和 返回值 :
- 1.const 修飾參數 : 在函數體內, 不希望改變參數的值;
- 2.const 修飾返回值 : 一般情況下 返回值 使用 const 修飾, 是返回指針, 用于限制 指針指向的內容不允許改變 ;
(2) const 關鍵字 代碼示例 ( const 常量不能被賦值 | 錯誤示例)
const 關鍵字 代碼示例 : const 常量不能被賦值.
- 1.代碼示例 :
- 2.執行結果 :
const 常量一旦作為左值, 編譯時就會報錯
(3) const 關鍵字 代碼示例 ( 通過指針修改const常量 : 獲取 const 變量的地址, 并改變該地址的值 )
const 關鍵字 代碼示例 : const 常量可以通過指針修改
- 1.代碼示例 :
- 2.執行結果 :
通過指針可以修改 const 常量
(4) const 關鍵字 代碼示例 ( 修飾指針 | 錯誤示例 )
const 修飾指針規則 : 左數右指;
左數 : const 出現在 * 左邊時, 指針指向的數據為常量, 指向的數據不可改變;
右指 : const 出現在 * 右邊時, 指針地址本身是常量, 指針地址不可改變;
const 關鍵字 代碼示例 : 修飾指針
- 1.代碼示例1 : const 出現在 * 左邊, const int* p = &i;
- 2.代碼示例2 : const 出現在 * 左邊, int const* p = &i;
- 3.代碼示例3 : const 出現在 * 右邊, int* const p = &i;
- 4.代碼示例4 : const 同時出現在 * 左邊 和 右邊, const int* const p = &i;
( 5 ) const 關鍵字 代碼示例 ( 修飾返回值 )
const 關鍵字 代碼示例 : const 修飾返回值
- 1.代碼示例 :
- 2.執行結果 :
2. volatile 關鍵字 簡介
(1) volatile 關鍵字 簡介 ( 告訴編譯器 每次去內存中取變量值 | )
volatile 關鍵字簡介 :
- 1.作用 : 編譯器 警告指示, 告訴編譯器 每次去內存中取變量值 , 防止編譯器自己做優化, 改變了程序的執行邏輯;
- 2.使用情況 : ① 一個變量可能被多個變量同時訪問的情況, ② 變量可能被未知因素更改的情況 ;
(2) volatile 關鍵字 代碼示例
編譯器優化案例 : 有時我們不需要編譯器的優化, 有時編譯器優化完了反而得不到我們想要的執行效果 ;
- 代碼示例說明 :
四. 結構體 聯合體 關鍵字 ( struct | union )
1. struct 關鍵字
(1) 結構體定義 使用 ( ① 結構體定義 : struct 結構體名稱 {}; | ② 結構體變量聲明 : struct 結構體名 變量名 ; | ③ 定義結構體同時聲明結構體變量 : struct 結構體名稱 {} 變量名 ; | ④ 結構體定義別名 : typedef struct 結構體名稱 {} 別名名稱; 聲明變量 : 別名名稱 變量名稱 ; [ 定義一個別名后, ] | ⑤ 結構體定義別名省略結構體名稱 : typedef struct {} 別名名稱; 聲明變量 : 別名名稱 變量名稱 ; )
結構體定義 :
- 1.結構體定義最標準方法 : 最基本的方法, 聲明一個結構體, 使用 struct 結構體名 變量名 來聲明結構體變量;
- 2.定義結構體同時聲明結構體變量 : 在定義結構體的大括號后 寫上變量名;
- 3.定義結構體同時聲明變量 但不定義結構體類型名稱 : 定義結構體時如果不給出結構體的名稱, 那么只能在定義結構體時 同時 聲明該變量, 該結構體只有一個變量;
- 4.結構體定義別名 : 定義了別名的結構體, 在聲明結構體變量時可以不適用 struct 關鍵字;
-5.定義結構體別名 但是沒有給出結構體的類型名稱 : 如果使用 typedef 定義了一個結構體的別名, 那么該結構體可以不定義結構體類型名稱;
//定義結構體類型, 并定義一個別名 student, 可以不定義結構體的類型名稱 typedef struct {char* name;int age; }student;//聲明結構體變量 student stu;(2) struct 結構體大小
空結構體占用內存大小 :
- 1.C規范定義 : C語言規范中沒有定義空結構體的大小,不同編譯器有不同的默認值0或者1字節;
- 2.代碼示例 :
- 3.執行結果 :
空結構體變量類型大小為0,其變量的大小為0,其地址錯位1.
(3) struct 結構體實現柔性數組
柔性數組 :
- 1.普通數組 : 在定義的時候定義數組的大小,并且在棧上分配內存;
- 2.柔性數組 : 數組的大小未知,定義完之后可設置數組大小;
- 3.實現方式 : 使用結構體實現柔性數組.
- 4.代碼示例 :
- 5.執行結果 :
(4) 柔性數組 代碼示例 ( 處理斐波那契數列 )
柔性數組使用 :
- 1.代碼示例 :
- 2.執行結果 :
3. union 聯合體 關鍵字
(1) struct 和 union 的區別 ( struct 為每個元素分配獨立空間 | union 只為最大的元素分配內存空間 所有元素共享該空間 )
struct 和 union 的區別 :
- 1.struct 分配空間 : struct 結構體 為每個結構體元素分配獨立的內存空間 ;
- 2.union 分配空間 : union 聯合體 只為最大的聯合體元素分配內存控件, 所有的元素共享該空間 ;
- 3.struct union 空間分配示例 :
- 4.執行結果 :
(2) union 聯合體注意事項 ( 受大小端影響 )
union 聯合體 受大小端 影響 :
- 1.大端模式 : 低位數據放在 高位地址 中;
- 2.小端模式 : 低位數據放在 低位地址 中;
通過 union 判斷系統的大小端 :
- 1.代碼示例 :
- 2.執行結果 :
五. 枚舉 關鍵字 ( enum )
1. enum 關鍵字
(1) enum 枚舉關鍵介紹 ( 定義常量 | 只能定義 int 類型 )
enum 簡介 :
- 1.作用 : enum 是自定義類型, 作用是用來定義常量的 ;
- 2.定義要求 : enum 只能定義成 int 類型. 不能定義成 浮點型 ;
(2) enum 枚舉代碼示例
enum 枚舉代碼示例 :
- 1.代碼示例 :
- 2.執行結果 :
(3) enum 和 define 區別 ( #define 編譯時進行替換 | enum 是常量值 )
enum 與 define 區別 :
- 1.本質 : #define 是在編譯的時候進行簡單的替換, enum 枚舉是常量值.
- 2.能否被調試 : #define 宏 無法調試, enum 可以;
- 3.類型 : #define 沒有類型信息, enum 是 有特定的類型 的;
- 代碼示例 :
2. typedef 關鍵字
( 1 ) typedef 關鍵字介紹 ( 給已有類型重新命名 | 沒有新類型 | 無法擴展 )
typedef 介紹 :
- 1.作用 : typedef 用于給 存在的數據類型 重新命名;
- 2.沒有新類型 : typedef 關鍵字使用, 全程都沒有產生 新的數據類型 ;
- 3.類型無法擴展 : 不能使用 unsigned 和 signed 等擴展 typedef 重命名的類型;
typedef 與 define 區別 :
- 1.typedef 本質 : typedef 是給已有類別重新命名;
- 2.define 本質 : define是簡單的字符串替換, 沒有類別 類型 等其它含義 ;
- 3.代碼示例 :
總結
以上是生活随笔為你收集整理的【C语言】 C 语言 关键字分析 ( 属性关键字 | 常量关键字 | 结构体关键字 | 联合体关键字 | 枚举关键字 | 命名关键字 | 杂项关键字)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP自学笔记 ---李炎恢老师PHP第
- 下一篇: 【一起学Rust | 进阶篇 | Ser