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编程。
今天的文章C语言typedef用法详解分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/9235.html