关于双重指针的困惑
小步舞曲 2011-08-29 01:08:10 数据结构中稀疏矩阵的十字链表存储表示的程序中有这样的结构体定义
typedef int ElemType;
//稀疏矩阵的十字链表存储表示
typedef struct OLNode {
int i, j; //该非零元的行与列下标
ElemType e; //该非零元的值
struct OLNode *right, *down; //该非零元所在行表和列表的后继链域
}OLNode, *OLink;
typedef struct {
OLink *Rhead, *Chead; int mu, nu, tu; // 稀疏矩阵的行数、列数和非零元个数
}CrossList;
小弟对其中的OLink *Rhead, *Chead;的了解是双重指针,也就是说它是指向 指向OLNode指针的指针。那么它里面存放的就是指针的地址,后面又有一条语句是:
M->Chead[j] = p; 其中p = (OLink) malloc (sizeof(OLNode));
也就是说P指向OLNode,那么M->Chead[j] = p的意思是p中的值也就是新创建的结点的地址给M->Chead[j]中,一直非常困惑,Chead不是指向(指向OLNode指针)的指针吗?
在写这个帖子的时候突然想到了,十字链表存储方式本来是要创建两个链表,分别由每行和每列的头指针组成,Rhead个Chead本来就是用来方便我们找到某一行或者某一列的,每个头指针的类型都是OLinl的,当它们连接在一起组成一个链,那么Rhead和Chead中存放的就是第一个头指针的地址?那么就是指向OLink类型的指针,就是OLink *。 不知道是否理解正确??