首先回答你的第一个问题,typedef ElemType *Triplet;这一句声明了Triplet是一个指向ElemType的指针类型,根据上下文环境我猜测你上面还有一句typedef int ElemType;对于该问题:
问题1:我想知道InitTriplet为什么要用Triplet *T,Triplet不已经就是一个指向整型数据的指针吗?
InitTriplet为什么要用Triplet *T,这里定义实际与ElemType **T等价,即T是一个指向ElemType的指针的指针,这就可以解释为什么 *T=(ElemType *)malloc(3*sizeof(ElemType));这条语句中T前面为什么要加*。/* (*T)[0]=v1,(*T)[1]=v2,(*T)[2]=v3;/*这一句不明白,为什么是数组,而且要加*号,下面那个函数里的T[0]为什么不用加*号?*/这是为什么呢?你知道吗,根据 *T=(ElemType *)malloc(3*sizeof(ElemType));这句,(*T)实际上是指向动态分配的内存的首地址,再C语言里对对于这种引用方式(*T)[0]实际上是被解析为*((*T)+0),总之这里所有跟你所想不同的特性都是由
Triplet *T这条语句造成的,T不是你预想的指向ElemType的指针,而是指向ElemType的指针的指针。
对于问题3:
问题3:为什么InitTriplet中用 (*T)[0]代表存储单元的值,而在ISAscending中又用T[O]代表存储单元的值?
这里是为什么呢?
因为Status IsAscending(Triplet T)这表明T是一个指向ElemType的指针,Triplet T可以等价为ElemType* T,以下的疑问相信你能够推知了吧
对于为什么前面 InitTriplet函数要用(*T)[0]来代表存储单元的值,这里又可以用T[0]来代表存储单元的值?
根本原因就是 在InitTriplet函数里,T的定义是ElemType **T,而在另一个函数里,T的定义是ElemType *T,希望能帮到你
我想指针在这里你是懂的....但你应该不是很清除 typedef的用法...