C語言查缺補漏 八 typedef的使用

2021-08-28 16:30:57 字數 1646 閱讀 6496

至於typedef,說起來實在是太丟人了!!這兩年一直以為這個關鍵字是結構體的專屬關鍵字:

typedef 結構體型別  型別別名

型別別名 變數名 //定義

​ 最近才發現,它不僅可以給結構體起別名,還可以給各種各樣的型別起各種各樣的別名,用法實在是太活了!

​ ——比如基本資料型別:

typedef	int size;

size a; //等價於int a;

​ ——比如陣列:

typedef int t[105];

t a; //等價於 int a[105];

​ ——比如指標:

typedef char* ps;

ps p1, p2; //等價於 char *p1, *p2;

char* p1, p2;
​ 這裡面的p1和p2分別是什麼型別?

​ 可能和大家想的不太一樣(反正到時我是掉坑里了,尷尬),p1是char型指標,p2是char型。

​ ——用來定義與平台無關的東西:

​ 比如定義乙個叫max_double的浮點型別:

typedef long double max_double; //在一般平台的定義

typedef double max_double; //在不支援long double平台的定義

typedef float max_double; //在不支援double平台的定義

​ 這樣在跨平台時,只需要改一下max_double定義即可,比如之前博文寫的通用long long寫法 點這兒走你 新增的標頭檔案就是採用了該方法。

​ 要記住!!!typedef是定義了一種型別的新別名,不是簡單的字串替換!!比如:

typedef int* t;

int mystrcmp(const t);

​ const t等同於什麼?我當初不假思索地以為是const int* 。然後現實給了我狠狠的打嘴巴子,它實際上相當於int* const。原因在於const給予了整個指標本身以常量性,也就是形成了常量指標int const* (簡單來說,記住當const和typedef一起出現時,typedef不會是簡單的字串替換就行。)

​ 說到const int* 和 int* const等幾個的區別:

​ ——const int *a; 表示a是乙個指標,可以任意指向int型常量或變數

​ ——int const *a: 同const int *a

​ ——int * const a; 表示a是乙個指標常量,初始化時必須固定指向乙個int變數,之後就不能再指向別的地方了

​ 除此之外,typedef不能影響物件的儲存特性!!!例如以下**會出錯:

typedef static int t;   //無法與之前的'typedef'宣告說明符結合使用
​ 最後再總結一句:typedef作用是為型別起別名,但不同於#define的簡單替換!而且不同於#define替換時不作正確性檢查,typedef是在編譯時處理的。

​ 如果有寫的不對或者不全面的地方 可通過主頁的****進行指正,謝謝!

八,查缺補漏

宣告 public 初始化sdk static napi value inithiksdk const napi callbackinfo info 登出sdk static void cleanuphiksdk const napi callbackinfo info 實現 初始化sdk else...

c 查缺補漏

c 基本語法 c 初始化引數列表 c 預設建構函式 c 複製建構函式 三 複製控制 1 複製建構函式 1.1 幾個要點 1 複製建構函式 複製建構函式是一種特殊建構函式,只有1個形參,該形參 常用 const 修飾 是對該類型別的引用。class peopel 當定義乙個新物件並用乙個同型別的物件對...

bootstrap 查缺補漏

bootstrap標題樣式進行了以下顯著的優化重置 單行內聯 多行塊 注pre.pre scrollable 控制 塊區域最大高度為340px,一旦超出這個高度,就會在y軸出現滾動條 使用者輸入 複製 table 基礎 table striped 斑馬線 table bordered 帶邊框的 ta...