typedef问题(C语言)

(源程序来自《数据结构(C语言版)》严蔚敏 清华大学出版社 第12页)
抽象数据类型Triplet的表示和实现:
typedef ElemType * Triplet;
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)
{
T=(ElemType * )malloc(3*sizeof(ElemType));
if(!T) exit(OVERFLLOW);
T[0]=v1;T[1]=v2;T[2]=v3;
return OK;
}
问题1:typedef ElemType * Triplet的意思是什么? ElemType * Triplet是定义指向ElemType型的指针Triplet,

前面就加个typedef 让我费解,typedef是定义一个别名,即typedef <已定义的数据类型名> <新的数据类型名>

,那用在这里到底是什么意思,谁能帮我解释一下?
还有
typedef struct LNode
{
ElemType data;
struct LNode *next;
}*LinkList;
这里的
struct LNode
{
ElemType data;
struct LNode *next;
}*LinkList;是定义一个指向结构体LNode变量的指针LinkList,前面加个typedef 是什么意思(问题其实和上面的问

题一个性质)?
问题2:
T=(ElemType * )malloc(3*sizeof(ElemType));这一句返回分配空间的首地址并赋值给T,后面将T作为数组名,即

T[0]=v1;T[1]=v2;T[2]=v3;我想问的是数组没有定义就可以使用吗?(我知道数组名就是首地址)T只是一个首地址

而已,难道可以直接T[0],T[1]……?我在谭浩强的《C程序设计(第三版)》中没找到答案。希望有人帮我解释下?

假期没事自学《数据结构》,这个问题几天了一直没搞懂。百度搜下和你当初的问题一样,可看完你选的那个最佳答案还是不明白。昨晚弄到四点没明白很无奈,能详细讲解一下吗?我的积分太少,只能给这些了!

【第一个问题】

typedef 是用来给类型取别名的(注意:只是定义别名,不是定义变量)。例如:
struct Element {
char name[10];
int age;
};
typedef Element ElementType;
则以下两种定义变量的方法是完全等价的。
struct Element e;
ElementType e;

同样的也可以这样定义别名:
typedef Element *ElementPtr;
则以下三种定义变量的方法是完全等价的。
struct Element *p;
ElementType *p;
ElementPtr p;

另外,也可以像下面这样,在定义类型的同时,连别名也一起定义好了:
typedef struct Element {
char name[10];
int age;
} ElementType, *ElementPtr;

【第二个问题】

要注意,在C/C++中,“T[2]”这样的表达式,不一定是数组,也可能是指针!
如果T是指针,则T[2]等价于 *(T+2)。
你给的例子里,指针T是有定义的(函数的第一个参数)。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-27
1.你其实可以把struct{……}看成一个整体。C和C++不同,C使用结构时前面要用struct,如:
struct person
{
char name[10];
int age;
int sex;
};
struct person students[10];
而如果用了typedef:
typedef struct
{
char name[10];
int age;
int sex;
}person;
person students[10];
这里会被当作struct{char name[10];int age;int sex;} students[10];
所以只用一次的struct你甚至可以不写名字,在末尾定义。

2.T是一个ElemType*,malloc申请了3个ElemType的长度,T获得的是首地址。其实比如定义一个数组:
int a[10];
其实a[0]等价于*a,a[1]等价于*(a+1),以此类推。
所以这里的T也是等价的,T[0]就是*T,T[1]就是*(T+1)。
C语言没有检查,所以注意越界问题。
第2个回答  2010-07-26
typedef ElemType * Triplet
定义了一个新类型Triplet,它等价于ElemType *,即ElemType指针类型,可以用Triplet来定义ElemType类型的指针变量,例如:

Triplet a;
等价于
ElemType *a;

***********************************************************

T=(ElemType * )malloc(3*sizeof(ElemType));这一句返回分配空间的首地址并赋值给T,T是一个ElemType类型的指针,所以之后的T[0],T[1]之类的语句都是按ElemType类型的长度计算的,也就是说,定义了指针变量T,并将T指向分配空间后,就是创建了一个ElemType类型的数组。

***********************************************************

建议再看一书好一点的C语言教材,国内的计算机教材内容质量你也看到了,很差,这些基本内容都没有讲到,建议再选择一本国外的C语言教材,只要自己能看懂的就好,继续学习一下,否则以后学习算法、数据结构的过程你会感到非常吃力。

typedef问题(C语言)
在C语言中,typedef用以给类型取别名。例如,定义结构体Element,包含字符数组和整数age。使用typedef可以将Element结构体定义为ElementType别名。这样,我们可以在代码中用Element和ElementType互换使用。同样,可以通过typedef为指针类型取别名。例如,定义指针类型ElementPtr。使用typedef后,指针可以定义为struct El...

typedef问题(C语言)
typedef struct Element { char name[10];int age;} ElementType, *ElementPtr;【第二个问题】要注意,在C\/C++中,“T[2]”这样的表达式,不一定是数组,也可能是指针!如果T是指针,则T[2]等价于 *(T+2)。你给的例子里,指针T是有定义的(函数的第一个参数)。

c语言typedef的用法
c语言typedef的用法:C语言允许用户使用typedef关键字来定义自己习惯的数据类型名称。为基本数据类型定义新的类型名。比如跨平台时,有的机子不支持longdouble,但有需要高精度的一个类型参与计算,那就可以进行如下定义:为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称为数组定义简洁的类型...

C语言typedef的作用是什么?
C语言typedef的作用:1、typedef可以声明各种类型名,但不能用来定义变量。用typedef可以声明数组类型、字符串类型,使用比较方便。2、用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。3、当在不同源文件中用到同一类型数据(尤其是像数组、指针、结构体、共用体等类型数据)时,常用typ...

关于C语言中typedef的疑问?
typedef A B;\/\/将B定义为A的同类型 typedef void (*task_f) ();\/\/这里B相当于task_f,A相当于void (*) ()这里的意思是将task_f定义为一个返回值为void的函数指针 即task_f是一个指针,指向一个0参数,返回值为void的函数

typedef用法问题
你的疑问就是C语言里面的一个参数传递的问题。举个简单的例子:include<stdio.h> void Fun1(int a){ a = 3;} void Fun2(int &a){ a = 3;} int main(){ int a = 2;Fun1(a);printf("%d\\n",a);Fun2(a);printf("%d\\n",a);return 0;} 你可以看到结果,调用函数Fun1之后,...

一个C语言问题?
2、extern是全局变量:在C语言下默认的全局变量前都隐藏的加了该关键字,只是我们平常看到的没有这个extern关键字而已。问题8:什么是全局变量和局部变量?1、全局变量:对全局变量直接修改会失败,通过间接修改也会失败,因为全局变量是放在常量区,受到了保护;2、局部变量:对局部变量直接修改也会失败,...

C语言链表typedef问题,最后两句typedef定义什么意思
typedef 类型定义阿,将strutct student 取个别名Std,声明变量的时候就用 Std a;就不用写struct student a;下面的也是,将 Std* 取个别名 List。std* a,就可以写成 List a了。

在C语言中typedef是什么意思?干什么用的?
在C语言中,`typedef`是一个关键的特性,它的主要作用是创建新的类型别名。通过使用`typedef`,程序员可以为已存在的基本数据类型如`int`或`float`定义一个更直观、更易理解的名字。例如,`typedef int INTERGER;` 或 `typedef float REAL;`,这样的声明相当于为`int`类型创建了一个新的名字`...

在c语言中typedef是什么意思?干什么用的?
在C语言中,typedef是一个关键字,主要用于创建类型别名。一、基本含义 typedef在C语言中用于为已有的数据类型定义一个新的名字,这样可以在代码中使用这个新的名字来声明变量,使得代码更易于理解和维护。例如,可以定义一个新的整数类型名称,如`MyInt`,来代替内置的`int`类型。二、使用场景 1. 简化...

相似回答
大家正在搜