原址:
1.常規變數型別定義
例如:typedef unsigned char uchar
描述:uchar等價於unsigned char型別定義
uchar c宣告等於unsigned char c宣告
2.陣列型別定義
例如: typedef int array[2];
描述: array等價於 int [2]定義;
array a宣告等價於int a[2]宣告
擴充套件: typedef int array[m][n];
描述: array等價於 int [m][n]定義;
array a宣告等價於int a[m][n]宣告
3.指標型別定義
例如: typedef int *pointer;
描述: pointer等價於 int *定義;
pointer p宣告等價於int *a宣告
例如: typedef int *pointer[m];
描述: pointer等價於 int *[m]定義;
pointer p宣告等價於int *a[m]宣告明
4.函式位址說明
描述:c把函式名字當做函式的首位址來對待,我們可以使用最簡單的方法得到函式位址
例如: 函式:int func(void);
unsigned long funcaddr=(unsigned long)func;
funcaddr的值是func函式的首位址
5.函式宣告
例如: typedef int func(void);
func等價於 int (void)型別函式
描述1: func f宣告等價於 int f(void)宣告,用於檔案的函式宣告
描述2: func *pf宣告等價於 int (*pf)(void)宣告,用於函式指標的生命,見下一條
6.函式指標
例如: typedef int (*func)(void)
描述: func等價於int (*)(void)型別
func pf等價於int (*pf)(void)宣告,pf是乙個函式指標變數
7.識別typedef的方法:
a).第一步。使用已知的型別定義替代typdef後面的名稱,直到只剩下乙個名字不識別為正確
如typedef u32 (*func)(u8);
從上面的定義中找到 typedef __u32 u32;typedef __u8 u8
繼續找到 typedef unsigned int __u32;typedef unsigned char __u8;
替代位置名稱 typedef unsigned int (*func)(void);
現在只有func屬於未知
b).第二步.未知名字為定義型別,型別為取出名稱和typedef的所有部分,如上為
func等價於unsigned unsigned int (*)(unsigned char);
c).第三部.定義乙個變數時,變數型別等價於把變數替代未知名字的位置所得到的型別
func f等價於unsigned unsigned int (*f)(unsigned char)
從網上看到乙個例子:
下面的**中編譯器會報乙個錯誤,你知道是哪個語句錯了嗎?
typedef char * pstr;
char string[4] = "abc";
const char *p1 = string;
const pstr p2 = string;
p1++;
p2++;
是p2++錯了。原因是const pstr p2並不等於const char * p2,而是char* const p2,它的位址是不能夠被改變的,因此會出現錯誤。簡單來說,記住當const和typedef一起出現時,typedef不會是簡單的字串替換就行。
常見typedef 用法
例如 typedef unsigned char uchar 描述 uchar等價於unsigned char型別定義 uchar c宣告等於unsigned char c宣告 2.陣列型別定義 例如 typedef int array 2 描述 array等價於 int 2 定義 array a宣...
typedef常見用法
1.常規變數型別定義 例如 typedef unsigned char uchar 描述 uchar等價於unsigned char型別定義 uchar c宣告等於unsigned char c宣告 2.陣列型別定義 例如 typedef int array 2 描述 array等價於 int 2 ...
typedef常見用法
typedef常見用法 1.常規變數型別定義 例如 typedef unsigned char uchar 描述 uchar等價於unsigned char型別定義 uchar c宣告等於unsigned char c宣告 2.陣列型別定義 例如 typedef int array 2 描述 arr...