qq_31708165
2016-06-20 11:22
采纳率: 28.6%
浏览 2.1k

C语言中单链表的初始化

这是一个C语言单链表并带有头结点的链表初始化,哪里有错?形参带不带&有什么不一样?
#include
#include
typedef struct student
{
int number;
struct student* next;
}Node,*List;
void init(List w)//List &w
{
w=(List)malloc(sizeof(Node));
if(!w)
return;
w->next=NULL;
}
int main()
{
List list1;
init(list1);
return 0;
}

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 尚书左仆射 2016-06-20 12:10
    已采纳

    形参不用引用,你改变的只是那个函数中实参的副本,而实参本身并没有改变。
    假设本来list1指向地址A,调用init函数后参数w的初值被初始化为A的地址。
    执行w=(List)malloc(sizeof(Node));后w指向了新分配的地址,但是list1并没有改变。

    已采纳该答案
    评论
    解决 1 无用
    打赏 举报
  • 小灸舞 2016-06-20 12:14

    你要通过init改变main函数的list1的指向(为它分配空间),必须传入一级指针的引用或者二级指针才行。
    因为你需要改变指针的指向,如果仅仅需要改变指针所指的值,那么传一级指针足矣。
    传一级指针意味着,main函数的list1和Init的形参w指向了同一块内存区域(但list1和w并不是同一个指针)

    评论
    解决 无用
    打赏 举报
  • Cceking 2016-06-20 12:28

    问题在w=(List)malloc(sizeof(Node));,List和Node不是同一类型,List是指针,一般相当与sizeof(int),Node则是结构体
    像init的一般都是return比较好
    关于形参带&的,http://c.biancheng.net/cpp/html/74.html解释了

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题