郧西论坛

标题: c中的typedef代表什么? [打印本页]

作者: Bstar    时间: 2005-6-2 08:32
标题: c中的typedef代表什么?
学过c的来看看  我最初接触的事c++  现在学的数据结构又是c语言版的  
      看到程序样例中老是用这种东西来定义结构  问一下


     还有 c中的输入输出大致语法?
作者: Bstar    时间: 2005-6-2 12:51
自己解答了 刚在编程爱好者上看到的:

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的好处!!
作者: Bstar    时间: 2005-6-2 13:01
由此引出的问题:  

转载的 我认为解答很好


这是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根本就不是变量。而是在给一种数据类型起一个新的名字。
我错在哪里了?
作者: Bstar    时间: 2005-6-2 13:05
对楼上问题的解答 我认为很好


<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)是正确答案。
作者: Bstar    时间: 2005-6-2 13:59
其实我也没想到关于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>
这两种定义方式 基本上是没有区别的 只是第一种方式多写了几个字符而已
作者: Bstar    时间: 2005-6-2 14:07
弄了几个小时 现在终于可以结贴了

关于typedef 我的理解如下

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

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

终于懂了 高兴

发完这个之后 锁帖 呵呵




欢迎光临 郧西论坛 (http://www.yunxi.net/) Powered by Discuz! X3.2