问题--链表指针传参,修改next指针只传值
1.问题--链表指针传参,修改next指针只传值
Link_creat_head(&head, p_new);//将新节点加入链表
在这当中head头指针传的是地址,而p_new传的是值,这二者有什么区别?
#include <stdio.h>
#include <stdlib,h>
//定义结点结构体
typedef struct student
{
//数据域
int num;
//学号
int score;
//分数
char name[20];/姓名
//指针域
struct student *next;
}STU;
void link_creat_head(STU **p_head,STU *p_new)
{
STU *p_mov *p_head;
if(*p_head==NULL)//当第一次加入链表为空时,head执行p_new
{
*p_head = p_new;
p_new->next=NULL;
}
else//第二次及以后加入链表
{
while(p_mov->next!=NULL)
{
p_mov=p_mov->next;//找到原有链表的最后一个节点
p_mov->next = p_new;
//将新申请的节点加入链表
p_new->next = NULL;
}
}
int main()
{
STU *head = NULL,*p_new = NULL;
int num, i;
printf("请输入链表初始个数:\n");
scanf("%d",&num);
for(i = 0;i < num;i++)
p_new=(STU*)malloc(sizeof(STU));//申请一个新节点
printf("请输入学号、分数、名字:\n");//给新节点赋值
scanf("%d %d %s",&p_new->num,&p_new->score,p_new->name);
Link_creat_head(&head, p_new);//将新节点加入链表
}
}
2.解决
二者的核心操作分别是:*p_head = p_new; p_new->next=NULL;
可以明显看到*p_head = p_new;一步中
p_head内部所存储的地址变成了p_new,里面存储的内容实实在在改变了,所以要传地址
而在p_new->next=NULL; 或写作(*(p_new).next = NULL;)更清楚,改变的是该指针所指向的存储区域中的值,该指针本身所存的地址还是该存储区域,并没有发生改变,所以仅仅传值即可
问题--链表指针传参,修改next指针只传值的更多相关文章
- python3.x 类似cpp引用指针传参修改
#同名局部变量调用外部全局变量: num=100def fun(): global num#告诉编译器是全局的num num+=100 print(num)print(fun)print(fun()) ...
- [ 随手记6 ] C/C++ 形参、实参、按值传参、指针传参、引用传参
个人原创: 1. 形参:形式上的参数,一般多在函数声明.函数定义的参数上: 2. 实参:实体参数,有实际的值,在运算上被循环使用的值: 3. 按值传参:按值,就是把实际的值传给函数内部: 4. 指针传 ...
- c/c++指针传参
首先要理解参数传递,参数传递分值传递,指针传递,引用传递.(就我自己理解,就是把实参对形参进行赋值) 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角度来说,值传递是单 ...
- C++单纯的指针传参的问题
C++指针传参也是单纯的复制一份地址,如下代码: #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace st ...
- 指针数组的初始化和遍历,并且通过for循环方式、函数传参方式进行指针数组的遍历
/************************************************************************* > File Name: message.c ...
- c指针与数组,传参问题,指针数组与数组指针的区别,二维数组动态内存分配
一 数组的结构:顺序存储,看谭浩强中的图,牢记 1.数组名指代一种数据结构:数组 现在可以解释为什么第1个程序第6行的输出为10的问题,根据结论1,数组名str的内涵为一种数据结构,即一个长度为10的 ...
- C++的结构体指针传参
typedef struct node{int n;node *left;}*tnode; 传参的时候注意用** void init(node **nn);int main(){tnode nna;i ...
- [ 随手记 2 ] C/C++ 数组/指针/传数组到函数/指针数组/数组指针
1.=================================================================== 1,数组是一块内存连续的数据.2,指针是一个指向内存空间的变 ...
- Jenkins传参修改jmeter的报告名称和详细报告地址
目前已经可以发送邮件了,我已经配置了Jenkins,但是有几个显示问题,待处理1.报告名称地址, 2详细报告地址没有做跳转 更改后为: 修改url 1.打开样式的jmeter-results-deta ...
- C++二级指针和指针引用传参
前提 一级指针和引用 已经清晰一级指针和引用. 可参考:指针和引用与及指针常量和常量指针 或查阅其他资料. 一级指针和二级指针 个人觉得文字描述比较难读懂,直接看代码运行结果分析好些,如果想看文字分析 ...
随机推荐
- lxml模块
lxml主要用xpath.css选择器等来提取xml格式文档,html也是xml格式文档的一种. xpath方法返回列表的三种情况 返回空列表:没有找到任何元素 返回字符串列表:xpath规则匹配用了 ...
- 多维数组、Arrays类、稀疏数组、冒泡排序
多维数组 多维数组可以看成是数组的数组 比如二维数组就是一个特殊的一堆数组 其中每个元素就是一个数组. 二维数组: int a[][] = new int[2][5]; 解析:二维数组a可以看成一个两 ...
- Unity无法显示animator面板,如何解决?
步骤: 点击动画的主体: 右侧Inspector面板找到Animator,双击Controller中的对象: 左上角即可显示animator面板. 总结: 不行就双击!!!!!!!!!!!!!!!!! ...
- 牛客网刷Java记录第一天
第一题 下列程序输出啥? public class StringDemo{ private static final String MESSAGE="taobao"; public ...
- 一键打包,随时运行,Python3项目虚拟环境一键整合包的制作(Venv)
之前我们介绍了如何使用嵌入式 Python3 环境给项目制作一键整合包,在使用嵌入式 Python 环境时,通常是作为另一个应用程序的一部分,而Python3虚拟环境是为了在开发过程中隔离项目所需的 ...
- Python——第四章:推导式(Comprehensions)
推导式: 推导式是为了简化代码. 语法: 列表推导式:[数据 for循环 if判断] 集合推导式:{数据 for循环 if判断} 字典推导式:{k:v for循环 if判断} 元组推导式:不存在(因为 ...
- JavaScript apply、call、bind 函数详解
apply和call apply和call非常类似,都是用于改变函数中this的指向,只是传入的参数不同,等于间接调用一个函数,也等于将这个函数绑定到一个指定的对象上: let name = 'win ...
- UDP与KCP详解
UDP 以及TCP是什么.我们知道传输层中有TCP和UDP两种网络协议,这节就讲UDP是什么. Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagr ...
- 谈谈muduo库的销毁连接对象——C++程序内存管理和线程安全的极致体现
前言 网络编程的连接断开一向比连接建立复杂的多,这一点在陈硕写的muduo库中体现的淋漓尽致,同时也充分体现了C++程序在对象生命周期管理上的复杂性,稍有不慎,满盘皆输. 为了纪念自己啃下muduo库 ...
- 使用鼠标在图片上拖拽矩形框vue
<template> <div> <img class="no-drag" src="https://dashanbook.oss-cn-s ...