C语言typedef用法详解

C语言typedef用法详解C语言typedef用法详解前言方法与结构的联合使用与#define的区别typedef的复杂声明前言typedef(typedefine)是c语言的关键字,它的作用是为一种数据类型定义一个新名字。一般用来简化类型定义。方法typedef声明的用法和普通声明的用法基本相同,只是把typedef放在声明的前面。不使用typedefchar*ptr_to_char;使用typed…

前言

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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注