读书人

指针指针,该怎么解决

发布时间: 2012-10-26 10:30:59 作者: rapoo

指针,指针
最近刚开始学数据结构,看的时候有如下问题,希望大家帮助解决,先谢谢了
一本书中这样写到:
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*LinkList;
int ListInsert(LinkList *L,int i,ElemType e)
{
···
}
问题:LinkList已经是指针,下边定义形参的时候为什么这样(LinkList *L)定义?
另一本书中这样写:
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*LinkList;
int ListInsert(LinkList head,int i,ElemType e)
{
···
}
这个并没有像上边那样定义形参,用VC 6.0编译后都正确,想知道这两种有什么不同?

[解决办法]
int ListInsert(LinkList *L,int i,ElemType e)
{
···
}
这一种写法,可以对L指向的值修改
而第二种写法,不能对head指向的值修改

[解决办法]
LinkList head 指针
LinkList *L 指向指针的指针

区别楼上已经说的很明确了。
[解决办法]
实际上和一级指针差不多。

比如你调用swap(int a,int b)和swap(int *a, int *b)这两个是不一样的,一个是地址,一个值。

第一个实际上没有交换,而是副本,第二个交换了。


那如果是一个字符串呢,数组呢,那就二级指针,就是int **a之类的
[解决办法]
一楼说的没错。
第一种为指针的指针,因为要修改指针,所以必须传入该指针的指针
第二种传入指针,只能修改指针指向的内容

如果是链栈的话,入栈则意味着栈顶不断变化,而栈链一般是由栈顶指针来描述的,所以每次入栈,栈顶指针的值都要变化。

读书人网 >C语言

热点推荐