// 時間:2012.4.10 編程
// 目的:測試typedef 關鍵字 數組
// 修改時間:2013-04-15 函數
#include<stdio.h> 測試
#include<stdlib.h> this
void swap(int a) spa
{ 指針
printf("this is a test\n"); 對象
} three
main() io
{
typedef int INT; // 定義整型數據類型的別名 INT
typedef unsigned int UNINT; // 定義無符號整型數據類型的別名 UNINT
typedef char CHAR; // 定義字符數據類型的別名 CHAR
typedef char * pCHAR; // 定義字符指針類型別名 pCHAR
typedef char line_CHAR_10[10]; // 定義字符型一維數組(10個元素),數組類型別名 line_CHAR_10
typedef char (* line_pCHAR_10)[10]; // 定義字符型一維數組(10個元素),指針類型別名
typedef char line_CHAR_10_10[10][10]; // 定義字符型二維數組([10][10]),數組類型別名 line_CHAR_10_10
typedef char (* line_pCHAR_10_10)[10][10]; // 定義字符型二維數組([10][10]),指針類型別名 line_PCHAR_10_10
typedef char line_CHAR_10_10_10[10][10][10]; // 定義字符型三維數組([10][10][10]),數組類型別名 line_CHAR_10_10_10
typedef char (* line_pCHAR_10_10_10)[10][10][10]; // 定義字符型三維數組([10][10][10]),指針類型別名 line_PCHAR_10_10_10
typedef void(*ptr_to_func)(int); // ptr_to_func是一種數據類型,能夠定義函數指針變量,函數參數int無返回值
ptr_to_func fun;
line_CHAR_10 one_line1; // 定義一維數組變量
line_CHAR_10_10 tow_line1; // 定義二維數組變量
line_CHAR_10_10_10 three_line1; //爲三維數組變量名
pCHAR p; // char 型指針變量
line_pCHAR_10 p1; // char型一維數組指針
line_pCHAR_10_10 p2; // char型二維數組指針
line_pCHAR_10_10_10 p3; // char型三維數組指針
p3 = &three_line1;
p2 = three_line1;
p1 = tow_line1;
p2 = &tow_line1;
p = one_line1;
fun=&swap; //函數指針使用方法
// printf("%#X\n",r); //%0.8x x表示按十六進制輸出。8表示輸出數據佔8格。0表示不足8位用0填補,默認爲空格。.表示分割
}
5. typedef & 複雜的變量聲明
在編程實踐中,尤爲是看別人代碼的時候,常常會碰到比較複雜的變量聲明,使用typedef做簡化自有其價值,好比:
下面是三個變量的聲明,我想使用typdef分別給它們定義一個別名,請問該如何作?
>1:int *(*a[5])(int, char*);
>2:void (*b[10]) (void (*)());
>3. doube(*)() (*pa)[9];
答案與分析:
對複雜變量創建一個類型別名的方法很簡單,你只要在傳統的變量聲明表達式裏用類型名替代變量名,而後把要害字typedef加在該語句的開頭就好了。
1,int* (*a[5])(int, char*)]
定義了一個數組 a[5],數組元素類型是函數指針類型,函數返回值類型是int*,參數是,int和char*。
這樣的書寫沒法辨認,所以有了下面的改進。
pFUN是新命名的一個類型,
typedef int* (*pFUN)(int, char*)
pFUN a[5],等價於int* (*a[5])(int, char*)]
2,void (*b[10]) (void (*)());
定義了一個數組 b[10],數組元素類型是函數指針A類型,函數的無返回值,參數類型是函數指針B類型
函數B無返回值,無參數。
更加沒法辨認的一個類型。
pFUN1是新命名的一個類型。
typedef void (*pFUN1)();
pFUN2是新命名的一個類型。
typedef void (*pFUN2)(pFUN1)。
使用定義的 pFUN2 類型來聲明對象,等價於void (*b[10]) (void (*)());
pFun b[10];
3,doube(*)() (*pa)[9];
自行分析,呵呵