在C语言中typedef是什么意思?干什么用的?

 我来答
焉秋梵正Tx
2018-12-03 · TA获得超过6591个赞
知道答主
回答量:23
采纳率:0%
帮助的人:6024
展开全部

typedef是C/C++常用语法,typedef作用,归结起来,可以分为四种:

1、定义一种类型名

常规的应用中,想要定义两个字符指针,写下如下代码: char *a, b

(1)char* a,b;

(2)char c='m';

(3)a=&c;

(4)b=&c;

上述代码是错误的,只有a为字符指针,b仍旧为字符变量。通过#define进行宏定义,仍然是无效的,因为宏定义仅仅是字符替换。

以下则可行:

(1)typedef char* PCHAR;

(2)PCHAR pa, pb;  

2、用于struct结构体

(1)#include <stdio.h>

(2)struct tagPOINT1

(3) {

(4)int x;

(5)int y;

(6)};

(7)int main()

(8){

(9)tagPOINT1 p1,p2;//此句编译无法通过

(10)//错误信息:error: unknown type name 'tagPOINT1'

(11) //环境:Gcc 4.8.1

(12)}

必须采用如下定义;

(1)struct tagPOINT1 p1,p2;//必须有关键字 struct

(2)采用typedef,则可以省掉结构体定义时的struct

(3)ypedef struct tagPOINT

(4){

(5)int x;

(6)int y;

(7)}POINT;

(8)POINT p1; // 这样就比原来的方式少写了一个struct。

3、跨平台移植

程序编写中,如果考虑到平台移植的因素,则需要从代码中抽象出硬件层的差异,例如,变量所占空间,端模式等等。 

考虑一个浮点型变量,在不同的硬件平台上,所占据的空间有可能不同,此时,可以采用typedef将其定义到单独的头文件内,该头文件是纯粹抽象硬件相关的内容:

(1)typedef float REAL;

(2)typedef short int INT16;

(3)typedef int INT32

(4)...

这样的话,如果将来考虑到程序的移植,只需要修改该头文件即可。

4、为复杂的声明取别名

复杂的声明形如:void (*b[10]) (void (*)());

意思:首先*b[10]为指针数组,它里面的十个元素全是指针。到底是什么指针呢,是一个返回类型为空,形参为空的函数指针

这种复杂的声明,可以用typedef进行简化: 

首先:声明后面的函数指针:

(1)typedef void (pFunParam *)();

接着声明前面的指针数组:

(1)typedef void (*pFunx)(pFunParam);

原声明的最简化版:

pFunx b[10];

本文档在撰写过程中,参考了网络博客typedef用法

里面提到一个复杂的声明:

(1)doube(*)() (*e)[9];

而然这个声明在gcc下编译时不通过的,按照作者的本意,似乎应该这样声明:

(1)double (*(*e)[9])();

e是一个指向9维数组的指针,数组内为函数指针,该函数指针形参为空,返回类型为double。

这样的话,应该采用这样的typedef来简化声明:

typedef (*(*ptr)[9])();

扩展资料

typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

参考资料来源:百度百科-typedef

mxz167777401
2011-12-14 · TA获得超过397个赞
知道答主
回答量:10
采纳率:0%
帮助的人:4.2万
展开全部
声明新的类型名来代替原有的类型名
比如,typedef int INTERGER; 或 typedef float REAL;
相当于用INTERGER来代表int类型,用REAL来代表float
习惯上把用typedef声明的类型用大写字母表示
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
one_in_zero
2011-12-14 · TA获得超过1019个赞
知道小有建树答主
回答量:383
采纳率:60%
帮助的人:152万
展开全部
自定义数据类型
经常用来将结构定义成一个数据类型~如:
typedef struct student{
char name[10];
char kemu[10];
double mark;
}student;
这样就可以直接定义数据
student stu;
stu.name = '张三';
stu.kemu = '语文';
stu.mark = 97.5;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-12-14
展开全部
定义一种新的数据类型,这种类型又可以用来声明属于该类型的变量,大多数情况typedef用来定义一种结构体,因为原有数据类型不够用了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
DevSONG
2019-07-03 · 超过10用户采纳过TA的回答
知道答主
回答量:46
采纳率:100%
帮助的人:9.1万
展开全部

上一节,我们学习了C语言中常量的使用,这一节,我们学习C语言中的typedef关键字。喜欢的话可以点个赞,也欢迎关注我的往期视频,C语言入门,从开发环境开始。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式