typedef关键字

// 时间: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];

自行分析,呵呵

相关文章
相关标签/搜索