首页 > 其他分享 >关于在Reverse函数中不能使用L=s而是*L=*s的原因分析

关于在Reverse函数中不能使用L=s而是*L=*s的原因分析

时间:2024-11-15 20:44:38浏览次数:3  
标签:Reverse 形参 而是 next prior 地址 实参 data 函数

完整代码地址:
https://blog.csdn.net/2301_76819732/article/details/143807340?spm=1001.2014.3001.5502

如果使用L=s; 的话,当输出结果时,会发现内容为空。

我感到很奇怪,按照我的设想,L=s;会把s指向的地址赋给L。

但现在这个情况肯定是失败的了。

我随便试了一试,发现如果是换成*L=*s;是成功的,这很奇怪,因为在我看来使用*一般是值传递;于是我使用test()函数来显示Ls中的各个地址。

发现除了头节点不一样之外,其他的结点地址都是一样的,为什么会这样嘞?

我查了一些资料之后发现,如果是使用L=s;的话,其实是将形参中的L指向了s形参L原本保存的是实参是的地址,在这之后变成了s保存的地址。这和实参L没有任何关系。(不能以为传递指针后,形参和实参就是同一个东西了,要避免形参指针在局部函数里指向其他地址

知道了L=s失败的原因;那,为什么*L=*s却可以实现嘞?

Ls都是一级结构体指针,使用*可以将整个解结构体复制过去,包括data、next、prior

data是int类型的,而next和prior同样都是结构体指针,保存的是地址,所以在值传递的时候传递的也是地址。L在清空之后,L->data=0,L->next=NULL,L->prior=NULL;在执行*L=*s之后,L->data=s->data,L->next=s->next,L->prior=s->prior;实参L和形参L保存的地址没有改变,修改的是实参中保存的值;而且,此时L和s所指向的是同一个双向链表,只不过头节点有两个

最后还要注意将s的头节点释放。

标签:Reverse,形参,而是,next,prior,地址,实参,data,函数
From: https://blog.csdn.net/2301_76819732/article/details/143807394

相关文章

  • 仓颉_Cangjie-函数式编程
    函数定义CC语言中,函数的声明告诉编译器函数的名称、返回类型和参数列表。函数的定义则提供了函数的实际体C++返回类型函数名(参数列表){//函数体//执行的操作//返回返回类型的值}Java函数的定义分为函数的声明和函数的实现Rust使用fn关键字定义函数。函......
  • C语言进阶3:字符串+内存函数
    本章重点求字符串长度strlen长度不受限制的字符串函数strcpystrcatstrcmp长度受限制的字符串函数strncpystrncatstrncmp字符串查找strstrstrtok误信息报告strerror字符操作内存操作memcpymemmovememcmpmemset0.前言:C语言中对字符和字符串的处理很是......
  • inline 函数:让你的 C++ 代码飞起来——深度剖析与实战技巧
    你是否曾经为C++代码中的函数调用开销感到烦恼?每次函数调用都需要创建栈帧、传递参数、跳转执行,这些看似微小的操作,累计起来就会成为性能瓶颈。在对性能要求苛刻的程序中,这些开销可能会影响到整体表现。今天,我们要聊的就是一个解决方案——inline函数。想象一下,如果编译器......
  • 【每天学点AI】前向传播、损失函数、反向传播
    在深度学习的领域中,前向传播、反向传播和损失函数是构建和训练神经网络模型的三个核心概念。今天,小编将通过一个简单的实例,解释这三个概念,并展示它们的作用。前向传播:神经网络的“思考”过程前向传播是神经网络计算的基础步骤,它涉及将输入数据逐层传递,通过神经网络的权重和激活......
  • mysql基础函数
    函数是一段可以直接调用的程序字符串函数|CONCAT(S1,S2,S3)|字符串拼接将s1,s2s3拼接成一个字符串||LOWER(str)|将字符串str全部转为小写||UPPER(str)|将字符串str全部转为大写||LPAD(str,n,pad)|左填充,用字符串Pad对str的左边......
  • c语言——内存函数
    1.memcpy函数使用和模拟2.memmove函数使用和模拟3.memset函数使用4.memcmp函数使用上一篇博客我给大家一一介绍了字符串相关的函数,那么这一篇我想给大家介绍关于内存方面的函数,内存函数,他是不考虑类型的,他只考虑从内存进行处理的一系列函数1.memcpy函数memcpy是用来......
  • 析构函数
    与构造函数相对应,构造函数是对象创建的时候自动调用的,而析构函数就是对象在销毁的时候自动调用的。与构造函数作用刚好相反,构造函数是用来初始化成员变量,析构函数是用来释放对象占用的资源。A(constintdata){cout<<"A的构造函数"<<endl;m_data=newint(data);*m_data......
  • 构造函数C++
    1.构造函数的介绍功能:专门用于对象的初始化工作,在类的对象创建时定义初始状态特点构造函数的名字和类名是相同的构造函数是没有返回值类型的,也不能写void。可以有形参(也可以重载)在创建对象的时候,会自动调用。而且是一定会调用,但是只会调用一次,不能通过已有......
  • C语言:数组(一维数组,二维数组,数组越界,数组作为函数参量,冒泡排序)
    1、一维数组的创建和初始化1.1、数组的创建数组是相同类型元素的集合•数组中可以存放1个或者多个数据•数组中存放的数据,类型是相同的数组的创建方式:元素类型自定义数组名(常量表达式)比如:intarr[10]doublearr[5]chararr[8+5]错误写法:intarr[n];......
  • C语言中的函数(大白话理解,超详细)
    1、函数是什么?函数就是一种工具,你需要的时候就可以调用他,简化写代码的工作量每个C语言程序至少有一个函数,即主函数main()2、C语言中函数的分类2.1、库函数库函数:是预先编写好的、可供程序员直接使用的函数注意:1、使用库函数必须包括#include对应的头文件(就是""或<>里......