typedef关键字

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

自行分析,呵呵

转载于:https://my.oschina.net/u/153520/blog/137098

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值