c中的typedef代表什么?

[复制链接] 5
回复
4152
查看
打印 上一主题 下一主题

1297

主题

5280

帖子

5280

积分

论坛创始人

总斑斑

Rank: 9Rank: 9Rank: 9

积分
5280

管理员

QQ
跳转到指定楼层
1#
发表于 2005-6-2 08:32:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多郧西好友

您需要 登录 才可以下载或查看,没有帐号?注册

x
学过c的来看看  我最初接触的事c++  现在学的数据结构又是c语言版的  
      看到程序样例中老是用这种东西来定义结构  问一下


     还有 c中的输入输出大致语法?
谨记  回帖是对别人的尊重
工作原因 很少发帖 有问题直接短消息--Bstar
生命不止,奋斗不息---每每忆及,无不动情涕零

1297

主题

5280

帖子

5280

积分

论坛创始人

总斑斑

Rank: 9Rank: 9Rank: 9

积分
5280

管理员

QQ
2#
 楼主| 发表于 2005-6-2 12:51:43 | 只看该作者
自己解答了 刚在编程爱好者上看到的:

1:tybedef创建一个同义词。比如typedef char chr;你就可以这样定义字符类型数据
chr a;

2:当用typedef strcut {
          int x;
          int y;
        }coord;
则是<FONT color=red>创建别名</FONT>。

此处的<FONT color=red>创建别名</FONT>:

那是C时代的东西,他定义一个别名,因为在C里struct定义的类,在用的时候要带上struct前缀

struct T{};

struct T a,b;

而用了别名之后就不用了,
typedef struct{} T;

T a,b;

这就是typedef的好处!!

1297

主题

5280

帖子

5280

积分

论坛创始人

总斑斑

Rank: 9Rank: 9Rank: 9

积分
5280

管理员

QQ
3#
 楼主| 发表于 2005-6-2 13:01:55 | 只看该作者
由此引出的问题:  

转载的 我认为解答很好


这是2004年4月的一道二级C语言选择题:
39设有下列语句
Typedef struct S
{ int g;char h;}T;
则下面叙述正确的是:
A)可用S定义结构体变量
B)可以用T定义结构体变量
C)S是struct类型的变量
D)T是struct S型的变量
我选的是B
而正确答案是D
这是为什吗?
首先我认为T根本就不是变量。而是在给一种数据类型起一个新的名字。
我错在哪里了?

1297

主题

5280

帖子

5280

积分

论坛创始人

总斑斑

Rank: 9Rank: 9Rank: 9

积分
5280

管理员

QQ
4#
 楼主| 发表于 2005-6-2 13:05:55 | 只看该作者
对楼上问题的解答 我认为很好


<FONT color=red>我认为是答案有误,理由如下。
这几句话可以分为几个部分:
1typedef
2struct s
  {
  int g;
  char h;
  }
3t;
首先 typedef 将 struct s {} 看作一个整体,
并将 t 定义为一个可以表示 struct s {} 的标识符,
如此看来以后用 t 即可代替 struct s {} 用于定义结构体,如:
struct s
{}结构体名称;
同样于
t 结构体名称

所以,带回原题,
1)肯定不对,应该用 struct s 结构体名定义。
3)s 并不是一个变量,它只是一个指针变量,指向结构体的开头。
4)以上已解释清楚
</FONT>
所以2)是正确答案。

1297

主题

5280

帖子

5280

积分

论坛创始人

总斑斑

Rank: 9Rank: 9Rank: 9

积分
5280

管理员

QQ
5#
 楼主| 发表于 2005-6-2 13:59:15 | 只看该作者
其实我也没想到关于typedef的问题会有这么多

再来一个
<FONT color=crimson>问题:</FONT>

typedef struct LNode{
   int data;
   
}LNode;

typedef struct {
   int data;
   
}LNode;

这两个定义结构有什么区别


<FONT color=red>解答:</FONT>

typedef struct LNode{
   int data;   
}LNode;
用户可以通过struct LNode或者LNode定义结构

typedef struct {
   int data;   
}LNode;
用户只能通过LNode定义结构

/*例程*/
#include <stdioh>

typedef struct LNode
{
   int data;   
}LNode;

typedef struct
{
   int data;  
}LNode2;

void main()
{
   LNode a;
   struct LNode b;
   LNode2 c;

   adata = 1;
   bdata = 2;
   cdata = 3;
   printf("%d %d %d",adata, bdata, cdata);
}
/*编译成功 输出1 2 3*/

<FONT color=red>同时
</FONT>typedef struct LNode{
   int data;   
}LNode;
用户可以通过struct LNode或者LNode定义结构
在实际编程中是几乎看不到的!

<FONT size=5>所以</FONT>
这两种定义方式 基本上是没有区别的 只是第一种方式多写了几个字符而已

1297

主题

5280

帖子

5280

积分

论坛创始人

总斑斑

Rank: 9Rank: 9Rank: 9

积分
5280

管理员

QQ
6#
 楼主| 发表于 2005-6-2 14:07:15 | 只看该作者
弄了几个小时 现在终于可以结贴了

关于typedef 我的理解如下

1 对于变量 可以替代变量类型(2#)
2 对于结构  定义别名 简化每次要输入的前缀struc

3 用typedef来定义变量 带不带结构名本质上有区别 实际上根本用不着

终于懂了 高兴

发完这个之后 锁帖 呵呵

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

郧西论坛微信公众号
快速回复 返回顶部 返回列表