C++中typedef用法

C++不仅提供了丰富的数据类型,而且还允许由用户自己定义类型说明符,也就是说允许由用户为数据类型取"别名",该功能是通过关键字typedef来完成的。例如,有整型量a、b: 
   int a,b; 
   int是整型变量的类型说明符,int实际上是integer的简写。为了增加程序的可读性,可把整型说明符用typedef定义为: 
   typedef int INTEGER 
   以后就可用INTEGER来代替int作整型变量的类型说明了,例如: 
   INTEGER a,b; 
它等效于: 
   int a,b; 
   用typedef定义数组、指针、结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读性。 C++中是用关键字typedef定义一个标识符来代表一种数据类型,该标识符可以象其它基本类型的标识符一样使用。在用typedef进行类型定义时,其语法和变量定义很相似。typedef定义的一般形式为: 
   typedef 原类型名 新类型名 
例如: 
   typedef int * intptr; 
定义intptr为一个指向整型的指针类型。变量定义语句: 
   intptr p; 
等价于: 
   int * p; 
   需要 注意 的是:typedef定义的类型只是C++已有类型的别名,而不是新类型。有时也可用宏定义来代替typedef的功能,但是宏定义是由预处理完成的,而typedef则是在编译时完成的,后者更为灵活方便。 

  typedef可以为数据类型定义一个符号名,就象引用是一个变量的别名一样。它的主要用途是简化复杂的类型说明,改进程序的可读性。下面是几个例子: 
   typedef char *String; 
   Typedef char Name[12]; 
   typedef unsigned int uint; 
   这些定义的效果是String变成char*的别名,Name变成有12个元素的字符数组的别名,uint变成unsigned int的别名。 
   String str; // 等价于char *str; 
   Name name; // 等价于 char name[12]; 
   uint n; // 等价于unsigned int n; 
   前面复杂的的Compare说明,用typedef简化后,可读性就好多了: 
   typedef int (*Compare)(const char*, const char*); 
   int BinSearch (char *item, char *table[], int n, Compare comp) 
   { 
    //... 
    if ((cmp = comp(item, table[mid])) == 0) 
    return mid; 
    //... 
   } 
   typedef使得Compare作为一个新的类型名,它表示一个有给定原型(有两个常量字符指针参数,返回值为int型)的函数指针类型。

typedef void (*funcptr)(void) 什么意思?

这里是定义了一个指向参数为空,返回值为空的函数的指针类型。
比如:
#include<iostream>
#include<stdlib.h>
using namespace std;

typedef void ( *funcptr)(void); //定义指针类型

void fun1(void)  //定义函数一
{
 cout << "This is fun1" << endl;     
}

void fun2(void)  定义函数二
{
 cout << "This is fun2" << endl;     
}

int main()
{
   funcptr  p1;  //定义了一个该类型的指针p1
   p1 = fun1; //p1指向函数一
   p1();     
    
   p1 = fun2; //p1指向函数二
   p1();
   
   system("pause");  
}

定义一个函数指针类型。
比如你有三个函数:
void hello(void) { printf("你好!"); }
void bye(void) { printf("再见!"); }
void ok(void) { printf("好的!"); }

typdef void (*funcptr)(void);
这样就构造了一个通用的函数
你用的时候可以这样:
void speak(int id)
{
   funcptr words[3] = {&hello, &bye, &ok};
   funcptr fun = words[id];
   (*fun)();
}

这样的话,如果speak(0)就会显示“你好!”
speak(1)就会显示“再见!”
speak(2)就会显示“好的!”

用于处理参数和返回值的形式都一样,但是功能不确定的一组函数,可以使用函数指针。

比如算术运算符,加、减、乘、除,都可以用typedef int (*calc)(int,int)代表,等等


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值