标题:为什么在建 动态链表的时候,用&的啊
只看楼主
li9208
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-10-11
结帖率:0
已结贴  问题点数:20 回复次数:4 
为什么在建 动态链表的时候,用&的啊
为什么在建 动态链表的时候,用&的啊
void createlist (Linklist &L,int n){
L=(linklist )malloc(sezeof(NOde));
L->next=NULL;}
搜索更多相关主题的帖子: next 动态 
2012-10-12 20:05
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
得分:5 
回复 楼主 li9208
    并不一定非要用createlist (Linklist &L,int n),你也可以用createlist (Linklist *L,int n),它们的效果是一样的,只不过&L是对L进行取地址,而后者是表示L内存地址的变量。
2012-10-12 20:17
天剑山
Rank: 4
等 级:业余侠客
威 望:3
帖 子:119
专家分:266
注 册:2012-8-3
得分:5 
createlist函数的第一形参要求为一指针,&即取地址,若你直接穿入指针亦可
2012-10-12 20:39
suishuhao
Rank: 2
等 级:论坛游民
帖 子:89
专家分:10
注 册:2012-9-25
得分:5 
好像是大话数据结构上的段子啊,我从昨天到今天也研究了这个问题,给你看看:

调用malloc函数初始化一个线性链表。

程序1如下:

#include "stdio.h"         
#include "stdlib.h"

typedef struct Node
{
    int data;
    struct Node * next;
}Node;

typedef struct Node *LinkList;

int InitList(LinkList *L)
{ *L=(LinkList)malloc(sizeof(Node));
if(!(*L))
     return 0;

    (*L)->next=NULL;
     return 1;
}
void main()
{ LinkList L;

  InitList(&L);
}

难点:在VC6.0中,要使用malloc函数,需要的头文件是
      "stdlib.h" 。

请分析如下的程序2是否正确:

#include "stdio.h"         
#include "stdlib.h"

typedef struct Node
{
    int data;
    struct Node * next;
}Node;

typedef struct Node *LinkList;

int InitList(LinkList L)
{ L=(LinkList)malloc(sizeof(Node));
if(!L)
     return 0;

    L->next=NULL;
     return 1;
}
void main()
{ LinkList L;

  InitList(L);
}

分析:首先分析如下的程序:
#include<stdio.h>

void dayin(char x)
{x=getchar();}

void main()
{char L='a';
dayin(L);

printf("%c",L);
}
调用dayin()函数之时,就内存中开辟一个名称为x的临时变量,将L的值a赋值给x,然后x又通过getchar函数获得了一个新值(该值将存放在x中的原来的值a覆盖掉),调用完成后,释放掉x,而L中的值仍然为a。那么这个程序应该怎么改哪?方法是运用指针(运用指针方法破解这种问题谭浩强的书C程序设计(第三版)中讲过)。其实不采用指针而采用数组、全局变量、return函数都可以。
修改后的程序如下:
#include<stdio.h>

void dayin(char * x)
{*x=getchar();}

void main()
{char L='a';
dayin(&L);
printf("%c",L);
}

据此,我们可以分析程序2:
调用InitList函数时,内存中开辟一个临时指针变量L(类型是指向结构体类型),然后将实参L的值传递给形参L,然后调用malloc函数获得一个新指针,形参L的内存中原先存放的实参L的值被新指针覆盖掉,执行完InitList函数调用后,释放形参L的内存空间,而实参L的值被没有变化。因此,程序2是无法完成单链表的初始化的。因此应该采用程序1的方法,传递变量的指针(这种方式要记住,常用。谭浩强的C程序设计第三版讲过)。

参考文献:[1].程杰.《大话数据结构》第三章所带源程序:"02线性表链式存储_LinkList.c"。

[ 本帖最后由 suishuhao 于 2012-10-12 21:22 编辑 ]
2012-10-12 20:52
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3450
专家分:19340
注 册:2012-3-31
得分:5 
学习

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-10-12 21:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-383050-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.334310 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved