标题:求解,指针使用前必须初始化的问题。
只看楼主
yujianvic
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-2-28
结帖率:0
 问题点数:0 回复次数:3 
求解,指针使用前必须初始化的问题。
typedef struct LNode
{
    int data;
    struct LNode * next;
}LNode, * LinkList;

void init (LinkList *L)
{
    L = (LNode *)malloc (sizeof (LNode));
    L->next = NULL;
}
int main (void)
{
    LinkList L;
    init(L);
}
为什么程序一运行就崩溃啊;
但是改成这样就可以了:
typedef struct LNode
{
    int data;
    struct LNode * next;
}LNode, * LinkList;

void init (LinkList *L)
{
    *L = (LNode *)malloc (sizeof (LNode));
    (*L)->next = NULL;
}
int main (void)
{
    LinkList L;
    init(&L);
}
为什么???
搜索更多相关主题的帖子: next void 
2013-04-20 10:42
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:0 
void fun(int n){  n = 5;  }

比如这个函数,n是一个形参,编译时会重新开辟一个int空间存储 n,把新的空间的 n值变为 5,原来的数值未改变

如何改变原来的数据?

void fun(int *p){  *p = 5;  }

把数据的地址传入,编译时同样会开辟 int * 大小的空间存储这个地址,但是地址指向还是原来的数据,所以原来的数值就变成 5了,和下面代码差不多的

程序代码:
{
int n = 3;
int *p = &n;
*p = 5;
}


上面的代码,似乎没有改动 n,但 n值确实变成 5了。

[ 本帖最后由 azzbcc 于 2013-4-20 15:18 编辑 ]


[fly]存在即是合理[/fly]
2013-04-20 15:16
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
得分:0 
LinkList L相当于struct LNode *L,这时执行L = (LNode *)malloc (sizeof (LNode));是可以的
LinkList *L相当于struct LNode **L,执行L = (LNode *)malloc (sizeof (LNode));就是错误的
2013-04-20 15:56
扬州笑哈哈
Rank: 2
等 级:论坛游民
帖 子:26
专家分:34
注 册:2013-3-1
得分:0 
回复 2楼 azzbcc
ding

很多事不是看你做没做,而是看你能做多久
2013-04-20 19:27



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




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

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