typedef问题(C语言)

来源:百度知道 编辑:UC知道 时间:2024/09/21 13:38:42
(源程序来自《数据结构(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程序设计(第三版)》

#include <stdio.h>
typedef int* ip;
void main()
{
ip i;
int* j;
int t=5;
j=&t;
i=j;
printf("%d\n",*i);
printf("%d\n",*j);
printf("%d\n",t);
}
上面给你一个简单例子可以说明你的疑问.
输出的都是5.
typedef int* ip;
这类似于你说的typedef ElemType * Triplet;
ip就是一个指针类型,它就等同于int*。
所以
ip i;
int* i;这两个变量的定义是一样的.
通过这种简单类型的说明希望对你有帮助.
问题2,
因为它申请了3个内存单元,所以可以使用的。