关于双重指针的困惑

小步舞曲 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 *。 不知道是否理解正确??
...全文
653 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小步舞曲 2011-08-29
  • 打赏
  • 举报
回复
谢谢apple_lover55的解答 我已经明白了 十分感谢!!
Trinx 2011-08-29
  • 打赏
  • 举报
回复
双重指针有时可以理解为数组指针,然后搂住可以对照下你上面的赋值。
jason-xu 2011-08-29
  • 打赏
  • 举报
回复
也就是说P指向OLNode,那么M->Chead[j] = p的意思是p中的值也就是新创建的结点的地址给M->Chead[j]中,一直非常困惑,Chead不是指向(指向OLNode指针)的指针吗?
其实很好理解呀,你可以把OLink当成普通的变量来理解呀,
假如你定义了一种类型的变量指针如(int)
int * a;
你不是可以用a[i] = x; 的形式给a指向的数组赋值吗?
这里也是同样的道理,OLink *Chead是指向Olink这种类型的指针,
所以可以用Chead[i] = p;来赋值,和上面的形式不是一样吗?只是因为他的类型是指针而已
仙度瑞城 2011-08-29
  • 打赏
  • 举报
回复
路过帮顶..
wwai168 2011-08-29
  • 打赏
  • 举报
回复
帮顶,学习

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧