数据结构中C语言的函数变量使用指针的一个问题

Northwindrocker 2009-07-12 07:46:30
近来看数据结构的书,其中有个一个创建单链表的函数是这样写的

void CreateList(SNode *&L,ElemType a[],int n)
{

... ...

}

typedef struct node
{
ElemType data;
struct node *next;
}

问题是这里 CreateList中的参数 SNode *&L 表示什么?为什么这么用没必要吧
...全文
162 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
meipen 2009-07-12
  • 打赏
  • 举报
回复
楼主想怎么引用函数写一下,我也遇到这个问题
Northwindrocker 2009-07-12
  • 打赏
  • 举报
回复
呵呵谢谢,前面约定部分跳过了。
ies_sweet 2009-07-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Northwindrocker 的回复:]
我看的是清华的那本,李春葆的《数据结构习题与解析》我写的例子是他书上的例子。
[/Quote]

楼主应该看一下这本书前面的部分
作者应当就表达形式有个约定

&表示引用调用,其实就是C语言里的传递指针调用
可以把参数值返回主调函数
这样写可能不符合C的语法,但是只是作者的一种写法
或者说是本书的一个约定了

只要记得是指针操作就可以
其他不必深究。
Northwindrocker 2009-07-12
  • 打赏
  • 举报
回复
我看的是清华的那本,李春葆的《数据结构习题与解析》我写的例子是他书上的例子。

wudongxu 2009-07-12
  • 打赏
  • 举报
回复
如果你看的是清华那本的话,它用的是C++不是C所以就有指针的引用.如果要用C就得使用指针的指针.这样才可以防止返回局部变量的值.
Northwindrocker 2009-07-12
  • 打赏
  • 举报
回复
我这样写的例子是否可以
#define char ElemType

void main ()
{
SNode *L;
char a[10] = 'a','b','c','d','e','f','g','h','i','j';
CreateListF(&L,a,10);



}

这样写是否可以

还有就是为什么CreateListF(SNode *L ,ElemType a[],int)
这样是否可以?和原来的有什么不一样?
forwrj 2009-07-12
  • 打赏
  • 举报
回复
正常的情况下应该是这样写的

void CreateListF (SNode **L, ElemType a[], int n)
{

SNode *pHead;
int i;
pHead = (SNode *)malloc(sizeof(SNode));
pHead->next = NULL;
for ( i = 0; i < n; i++)
{
SNode *s;
s = (SNode *)malloc(sizeof(SNode));
s->data = a[i];
s->next = L->next;
L->next = s;
}
*L = pHead; /*这里把pHead返回出去,所有malloc的内存需要在另一个地方去free*/
}


写代码的习惯问题,不过一般不会像LZ的例子那样写.
Northwindrocker 2009-07-12
  • 打赏
  • 举报
回复
我的意思是这样创建的链表,在函数外可以调用吗?如何调用呢?
Walf_ghoul 2009-07-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Northwindrocker 的回复:]
我把完整的函数写出来大家看看,平时看习惯的return 形式的函数,觉得这样写是不是很怪,另外这样写函数外调用如何调用呢?

void CreateListF (SNode *&L, ElemType a[], int n)
{
//头部插入节点创建单链表,单链表带头节点
SNode *s;
int i;
L = (SNode *)malloc(sizeof(SNode));//创建头节点
L->next = NULL;
for ( i = 0; i < n; i++)
{ s = (SNode *)malloc(sizeof(SN…
[/Quote]
正常的调用的方式,按照约定,你传递给它规定的参数,它做你要它做的事情
Walf_ghoul 2009-07-12
  • 打赏
  • 举报
回复
对于一个参数变量,在函数里若想改变它原有的值,就应该传递它的指针所以引用。。。这里用的是指针的引用,也可以用指向它的指针。。
Northwindrocker 2009-07-12
  • 打赏
  • 举报
回复
我把完整的函数写出来大家看看,平时看习惯的return 形式的函数,觉得这样写是不是很怪,另外这样写函数外调用如何调用呢?

void CreateListF (SNode *&L, ElemType a[], int n)
{
//头部插入节点创建单链表,单链表带头节点
SNode *s;
int i;
L = (SNode *)malloc(sizeof(SNode));//创建头节点
L->next = NULL;
for ( i = 0; i < n; i++)
{ s = (SNode *)malloc(sizeof(SNode));
s->data = a[i];
s->next = L->next;
L->next = s;
}

}

djj2007 2009-07-12
  • 打赏
  • 举报
回复
是一个指针的引用

不是必须这么用,但是如果不用引用的话,就得用二级指针,或者用return语句返回链表的头指针,这个函数必须将建立的链表头指针返回给调用者

69,373

社区成员

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

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