woaini92887 发表于 2014-11-29 14:17:58

急急 这到底怎么回事呀

void CreateList_L(LinkList *L, int n) {// 算法2.11
// 逆位序输入(随机产生)n个元素的值,建立带表头结点的单链线性表L
LinkList p;
int i;
srand(time(0));
(*L) = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;            // 先建立一个带头结点的单链表
for (i=0; i<n; i++) {
    p = (LinkList)malloc(sizeof(LNode));// 生成新结点
    p->data = rand()%100+1;   // 改为一个随机生成的数字
    p->next = (*L)->next;   
      (*L)->next = p;    // 插入到表头
}
} // CreateList_L

这里面为什么是(*L)->next在结构体中不是(*L).next 的引用吗 ?
还有第二个问题p = (LinkList)malloc(sizeof(LNode)) 这个中被强制转换后 不是指针了 怎么可以赋值给指针变量P呢 malloc没有被强制转换返回的是viod*类型的 相当于一个地址。我想应该是p = (LinkList*)malloc(sizeof(LNode))
在这句(*L) = (LinkList)malloc(sizeof(LNode))中(*L) 表示的不是指针了 因为有个* 是取指针L所指向的内容或者赋值给它经过强制转换 2边类型一样可以赋值但是在p = (LinkList)malloc(sizeof(LNode)) 这个中 按那样分析就说不通了。。这到底那里出错了呀??????????????????

肥仔汇 发表于 2014-11-30 10:33:04

这是个问题

GHOST-DN 发表于 2014-12-6 18:59:19

第一个问题 你有没有注意到你的函数的第一个参数传入的是指针类型,这说明实际上你传进来的是一个地址,在函数里 *L表示的是“取址操作”,估计你的结构体里next定义的是指针类型 所以用(*L)->next

GHOST-DN 发表于 2014-12-6 19:00:21

第一个问题 你有没有注意到你的函数的第一个参数传入的是指针类型,这说明实际上你传进来的是一个地址,在函数里 *L表示的是“取值操作”,估计你的结构体里next定义的是指针类型 所以用(*L)->next

GHOST-DN 发表于 2014-12-6 19:04:10

第二个问题真没啥可解释的,左边是LinkList类型,右边也是LinkList类型,你干嘛非要加一个*号呢。。。。。

GHOST-DN 发表于 2014-12-6 19:05:09

手机上回答不方便,第一次回答还写错了一个字,无语,只能这样说了。。。。

赵晓玉 发表于 2014-12-15 22:47:42

我对这个概念也很模糊
页: [1]
查看完整版本: 急急 这到底怎么回事呀