关于typedef与malloc一起使用时的一些语法问题?

来源:百度知道 编辑:UC知道 时间:2024/06/02 07:46:01
typedef int ELemType;
struct OLNode
{
int i,j;
ELemType e;
OLNode *right,*down;
};
typedef OLNode *OLink;
strcut CrossList
{
OLink *rhead,*chead;
int mu,nu,tu;
};
这些是定义
以下的为有疑问的语句
疑问语句1:
crosslist M;
M.rhead=(OLink *)malloc((M.mu+1)*sizeof(OLink));
我的疑问:
malloc((M.mu+1)*sizeof(OLink))是生成了一些地址那么M.rhead是不是就是指针数组了。
各位能否给我解释下,语句的意义和运行的结果。
疑问语句2:
crosslist M;
OLNode p,q;
p=M.rhead[i];
q=(OLNode *)malloc(sizeof(OLNode));
*q=*p;
我的疑问:
*q=*p;的运行结果是什么,是否就是简单的复制的意思了?

谢谢你的关注。
M.rhead=(OLink *)malloc((M.mu+1)*sizeof(OLink));

中的(OLink *)malloc((M.mu+1)*sizeof(OLink));
是不是返回的是二级指针的地址给M.rhead

malloc 返回的是一段连续的内存块,其返回值类型是 void *,当然可以转化为任何类型的指针了
你举的例句有点长,可分开理解:
int nOLink, memLen;
nOlink = M.mu + 1;
memLen = nOlink * sizeof(Olink);
M.rhead = (OLink*) malloc(memLen);

返回的确实是二级指针,它指向能容纳 M.mu+1 个指针变量的连续内存块