Nat4uki 2021-08-19 10:32 采纳率: 100%
浏览 99
已结题

C语言 数据结构单链表初始化中的实参形参的问题

在复习数据结构的时候尝试写单链表的代码。
因为想使用纯C语言,不使用C++d的内容,所以在创建链表初始化的时候就遇到了问题。
以下是我写的第一版本的代码

#include<stdio.h>
// 链表定义
typedef struct LNode{
    int data;
    struct LNode * next;
}LNode,*LinkList;
// 初始化函数
int InitList(LinkList *L){
    L = NULL;
    return 1;
}

int main(){
    LinkList L;
    InitList(&L);
    return 0;
}

这一部分无法在执行InitList函数后对链表L进行更改,主要是实参和形参的问题,但是我不知道怎么解决。
以下是运行截图:
执行前为0x10
img
执行后仍为0x10
img

在我上网搜寻了一些资料后,找到了解决办法,就是把链表用struct再封装一次,然后再使用一次指针。
第二版:

#include<stdio.h>
// 链表定义
typedef struct LNode{
    int data;
    struct LNode * next;
}LNode,*PNode;
//封装的单链表,包含头结点
typedef struct LinkList
{
    PNode Head;
}LinkList;
//初始化函数
int InitList(LinkList *L){
    L->Head = NULL;
    return 1;
}

int main(){
    LinkList L;
    InitList(&L);
    return 0;
}

运行截图
初始化前
img
初始化后内部的头节点变为0x0
img

使用这样的结构就可以解决问题,但是我不知道为什么需要这样做。
希望有哪位朋友懂的可以在此点拨一下。

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-08-19 10:39
    关注

    第一种你传递的是指针的指针,你要修改的是指针的值,不是指针的指针值。
    第二种你修改的是结构内部成员的值
    第一种如下修改就可以了。

    #include<stdio.h>
    // 链表定义
    typedef struct LNode{
        int data;
        struct LNode * next;
    }LNode,*LinkList;
    // 初始化函数
    int InitList(LinkList *L){
        *L = (LinkList)malloc(sizeof(LNode));
        return 1;
    }
    int main(){
        LinkList L;
        InitList(&L);
        L->data = 10;
        L->next  = NULL;
        return 0;
    }
    
    

    记住一点:函数传入的参数,参数本身会复制一份,你不能修改该参数,但你可以修改该参数指向的地址空间内容。
    比如参数为 int * pData,那么pData指针自身你修改不了,但你可以修改pData指向的地址空间内容,即 pData = 10无效,但*pData = 10有效

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月27日
  • 已采纳回答 8月19日
  • 创建了问题 8月19日

悬赏问题

  • ¥15 remotes安装提示没有description文件
  • ¥15 AttributeError: 'NoneType' object has no attribute 'drop_duplicates'报错
  • ¥15 编写c++计算器,用类和栈来做,要求如下
  • ¥15 以下代码,运行结果报错
  • ¥15 Vivado仿真数据出错
  • ¥15 银河麒麟不支持vant等前端框架怎么办?
  • ¥15 vue3的子组件在父页面调用不显示不生效问题
  • ¥15 cadence PEX
  • ¥15 phython创建了文件 显示在项目下面,但运行不了,运行时还是运行main文件,并且说main文件不允许并行运行
  • ¥15 FutureWarning:不推荐使用空或全 NA 条目的 DataFrame 串联行为。怎么改呢?