// 时间:2012.4.10
// 目的:测试typedef 关键字
// 修改时间:2013-04-15
#include<stdio.h>
#include<stdlib.h>
void swap(int a)
{
printf("this is a test\n");
}
main()
{
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];
自行分析,呵呵