C语言typedef用法详解

前言

typedef(type define)是c语言的关键字,它的作用是为一种数据类型定义一个新名字。一般用来简化类型定义。

方法

typedef声明的用法和普通声明的用法基本相同,只是把typedef放在声明的前面。

不使用typedef

char *ptr_to_char;

使用typedef

typedef char * ptr_to_char;
ptr_to_char a;

与结构的联合使用

如果你想在多个源文件使用同一类型的结构,你应该把标签声明或typedef形式的声明放在一个同一文件中。当源文件需要这个声明时可以使用#include指令把那个头文件包含进来。

typedef struct
{
	char name[20];
	int score;
}STU;
STU zhangsan;

与#define的区别

typedef char * p_str1;
#define p_str2 char *;
p_str1 s1,s2;
p_str2 s3,s4;

在上述变量定义中,s1,s2,s3都被定义成char* 而s4被定义成char。因为#define只是简单的字符替换,而typedef则是为一个类型起了一个新名字。

typedef char * p_str;
char string[4] ="abc";
const char *p1=string;
const p_str p2=string;
p1++;
p2++;

p2++会报错,因为p_str变成了一个类型。所以const修饰p2,p2不能改变。

typedef的复杂声明

用typedef简化复杂的声明和定义
这里再举一个例子:

int *(*a[10]) (int, char*);

用“右左法则”,我们可以很快弄清楚:a是一个包含10个函数指针的数组,这些函数的参数列表是(int, char*),返回值类型是int*。理解已经不成问题,这里的关键是如果要定义相同类型的变量b,都得重复书写:

int *(*b[10]) (int, char*);

这里有没有方便的办法避免这样没有价值的重复?答案就是用typedef来简化复杂的声明和定义。

typedef可以给现有的类型起个别名。这里用typedef给以上a、b的类型起个别名:

typedef int *(A[10]) (int, char); // 在之前定义的前面加入typedef,然后将变量名a替换成类型名A
现在要再定义相同类型的变量c,只需要:
A c;

再看一例:

void (*b[10]) (void (*)());

先替换右边括号里面的参数,将void (*)()的类型起个别名pParam:

typedef void (*pParam) ();

再替换左边的变量b,为b的类型起个别名B:

typedef void (*B) (pParam);

原声明的简化版:

B b[10];

参考:
[1]C和指针 人民邮电出版社 2008.4第二版。
[2]高质量嵌入式linux c编程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值