clear sky . 2023-12-23 17:39 采纳率: 23.1%
浏览 14
已结题

链表创建为什么需要二级指针?

我想实现一个单链表,在create_link函数里,没有使用二级指针,为什么还是可以实现节点指针域指向下一个节点地址的操作?
tail这个指针变量存在于栈区还是堆区?


#include <stdio.h>
#include <stdlib.h>

typedef struct Node{
    int data;
    struct Node* next;

}Node;

void create_link(Node*, Node*);

int main(){

    Node* head = (Node*)malloc(sizeof(Node)); 
        head->data=10; 
        head->next = NULL; //创建首节点
    for(int i=0;i<3;i++){
        Node* temp = (Node*)malloc(sizeof(Node));//创建后续节点
        printf("temp:%p\n", temp);                                //temp->data = i;
        temp->data = i;
        create_link(head, temp);
    }

    Node* mov=head;              //遍历所有节点

    while(mov!=NULL){        
        printf("%d\n", mov->data);
            mov=mov->next;
     }
}
void create_link(Node* Head, Node* temp){
    Node* tail = NULL; tail = Head;  //tail这个指针变量存在于栈区or堆区?

    while((tail->next)!=NULL){
        tail = tail->next; 
    }
        tail->next = temp;          //tail->next所代表的地址被重新赋值为temp的地址,
       temp->next = NULL;
}
  • 写回答

8条回答 默认 最新

  • yy64ll826 2023-12-25 16:38
    关注

    首先,让我们来理解一下这段代码。
    引用人工智能的回答
    这段代码定义了一个单链表,其中每个节点包含一个数据域和一个指向下一个节点的指针域。create_link函数用于在链表的尾部添加一个新的节点。

    关于你的问题:

    为什么在create_link函数里,没有使用二级指针,还是可以实现节点指针域指向下一个节点地址的操作?
    这是因为函数参数Node* Head和Node* temp都是指针变量,当你在函数内部改变它们的值时,实际上是在改变它们指向的地址,而不是改变指针本身的值。所以,即使没有使用二级指针,我们仍然可以通过改变指针变量的值来改变它所指向的地址,从而达到改变链表结构的目的。

    tail这个指针变量存在于栈区还是堆区?
    这个指针变量tail是在函数create_link的栈帧中分配的,因此它存在于栈区。每当函数被调用时,系统会在栈上为该函数分配一块内存,用于存储局部变量和函数参数。在这个例子中,tail指针变量就是存储在栈上的。当函数返回时,其栈帧会被销毁,其中的变量也会随之消失。

    这段代码创建了一个包含3个节点的单链表,并遍历输出每个节点的数据值。其中,create_link函数用于在链表的尾部添加新的节点。在每次调用create_link时,都会找到链表的尾节点(存储在tail指针中),然后将新的节点添加到链表的尾部。

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

报告相同问题?

问题事件

  • 系统已结题 1月3日
  • 已采纳回答 12月26日
  • 修改了问题 12月24日
  • 赞助了问题酬金15元 12月24日
  • 展开全部

悬赏问题

  • ¥15 angular项目错误
  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件