求助 C语言typedef的用法!请高手详细解答!!谢谢!!
答案:3 悬赏:70 手机版
解决时间 2021-01-04 13:26
- 提问者网友:不爱我么
- 2021-01-03 16:11
求助 C语言typedef的用法!请高手详细解答!!谢谢!!
最佳答案
- 五星知识达人网友:街头电车
- 2021-01-03 17:41
举几个例子吧。
typedef int p; //将p定义为int类型,定义"p i;" = “int i;”
typedef int p[10]; //将p定义为int[10]类型,定义"p i;" = “int i[10];”
typedef int* p; //将p定义为int类型,定义"p i;" = “int *i;”
typedef struct stu p; //将p定义为结构体stu类型,定义"p i;" = “struct stu i;”
typedef int p(int , int); //将p定义为int __(int ,int)类型的函数,定义"p i;" = “int i(int, int);”
typedef int p; //将p定义为int类型,定义"p i;" = “int i;”
typedef int p[10]; //将p定义为int[10]类型,定义"p i;" = “int i[10];”
typedef int* p; //将p定义为int类型,定义"p i;" = “int *i;”
typedef struct stu p; //将p定义为结构体stu类型,定义"p i;" = “struct stu i;”
typedef int p(int , int); //将p定义为int __(int ,int)类型的函数,定义"p i;" = “int i(int, int);”
全部回答
- 1楼网友:第幾種人
- 2021-01-03 18:53
typedef用法小结
在C语言的情况下,与C++稍有出入。 这两天在看程序的时候,发现很多地方都用到typedef,在结构体定义,还有一些数组等地方都大量的用到.但是有些地方还不是很清楚,今天下午,就想好好研究一下.上网搜了一下,有不少资料.归纳一下: 来源一:Using typedef to Curb Miscreant Code Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮。 typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。本文下面将竭尽全力来揭示 typedef 强大功能以及如何避免一些常见的陷阱。 如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法? 使用 typedef 为现有类型创建同义字。 定义易于记忆的类型名 typedef 使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。类型出现在所声明的变量名字中,位于 ''typedef'' 关键字右边。例如: typedef int size; 此声明定义了一个 int 的同义字,名字为 size。注意 typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要 int 的上下文中使用 size: void measure(size * psz); size array[4]; size len = file.getlength(); std::vector vs; typedef 还可以掩饰符合类型,如指针和数组。例如,你不用象下面这样重复定义有 81 个字符元素的数组: char line[81]; char text[81]; 定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样: typedef char Line[81]; Line text, secondline; getline(text); 同样,可以象下面这样隐藏指针语法: typedef char * pstr; int mystrcmp(pstr, pstr); 这里将带我们到达第一个 typedef 陷阱。标准函数 strcmp()有两个‘const char *'类型的参数。因此,它可能会误导人们象下面这样声明 mystrcmp(): int mystrcmp(const pstr, const pstr); 这是错误的,按照顺序,‘const pstr'被解释为‘char * const'(一个指向 char 的常量指针),而不是‘const char *'(指向常量 char 的指针)。这个问题很容易解决: typedef const char * cpstr; int mystrcmp(cpstr, cpstr); // 现在是正确的 记住:不管什么时候,只要为指针声明 typedef,那么都要在最终的 typedef 名称中加一个 const,以使得该指针本身是常量,而不是对象。 链表中的大概应用 name 保存在结构体单元的name[20] 数组里; typedef struct node { char name[20]; struct node *link; }stud; 这是前面定义的结构体变量,一个单元包含两个部分,一个用来存储name的数组name[20],一个用来存放下一个单元地址的指向结构体node的指针。假设该单元的地址是p,那么p->name 表示第一部分name[20]的地址,p->link表示第二部分,作用是存放下一个单元的地址。
- 2楼网友:天凉才是好个秋
- 2021-01-03 18:22
首先你得明白变量定义,比如像
int n;
这样的“类型 变量;”样子,或者像
int (*fun)();
这样的函数指针定义
所有这些变量定义,在前边加上typedef就使得本来是变量的东西变成了一种类型,举个例子
小汽车 a1;//我们定义了a1是一个小汽车实体,看得见摸得着
typedef 小汽车 a2;//a2是一个概念,看不见摸不着,代表了小汽车一类,也就是上面的a1所属类型,你可以用它来定义其他实体的类型,使得其他实体有和a1一样的属性
也许这样并看不出好处在哪,试想当你需要明确一些类型的组合或者类型描述起来很复杂,就很有用了,比如下面的定义
德国产的黑色的敞篷的2010年出产的跑车 a3;
是不是每次都这么说起来很麻烦?选择typedef可以更方便。
另外如果你不用typedef却又定义了很多这样的变量,当你想更新这个类型,比如改为2020年出产的,就必须一个一个更改,是不是更崩溃。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯