首页 > 其他分享 >c的多级指针

c的多级指针

时间:2024-02-04 17:15:19浏览次数:27  
标签:node int 多级 list key 节点 指针

指针的本质就是一个普通变量,它的值表示的是一个内存地址,这个地址中可能存放了其它变量。那么二级指针其实也是一个普通的变量,这个变量中同样也存放了一个内存地址,而这个内存地址是一个指针变量的地址
比如:

int a = 0;
int b = 1;
int *p = &a;
int **p2 = &p;

image
*(pointer)就是修改其指向地址的变量内容。

下面看多级指针的应用

例如:我们已经实现了一个有序链表(升序,由小到大):

//节点
typedef struct s_node
{
	//关键字
	int key;
	//下一个节点指针
	struct s_node *next;
} s_node;

//链表
typedef struct s_list
{
	//头节点
	struct s_node *header;
} s_list;
//使用二级指针来插入
int list_insert(s_list *list, int key)
{
	if (list == NULL)
	{
		return -1;
	}

	//创建新节点
	s_node *n = malloc(sizeof(s_node));
	n->key = key;
	n->next = NULL;

	//二级指针
	s_node **p = &list->header;
	//找到第一个大于key的节点
	while ((*p) != NULL && (*p)->key < key)
	{
		p = &(*p)->next;
	}
	//插入新节点
	n->next = *p;
	*p = n;

	return 0;
}

我们在使用C语言编程的过程中,如果遇到需要修改指针的值,使它指向另外一个节点,或变量,与其使用大量代码直接修改它的值,不如使用它的二级指针,直接修改其地址值,会大大减少代码冗余,提高代码质量。

标签:node,int,多级,list,key,节点,指针
From: https://www.cnblogs.com/zhangbo2008/p/18006499

相关文章

  • 【C++】类和对象(一)[类的相关定义及this指针]
    C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。C++在C语言的基础上增加了面向对象编程,C++支持面向对象程序设计。类是C++的核心特性,通常被称为用户定义的类......
  • Java 8 Optional:优雅处理空指针异常的新型容器
    一、Optional概述1.1Optional定义Optional是Java8中引入的一个类,用于描述一个值不存在的情况。它可以存储任意类型的值,或者表示一个空值。使用Optional类可以避免null值的传递和检查,提高代码的健壮性和可读性。Optional类的定义如下:publicfinalclassOptional<T>{/......
  • 双指针秒杀七道数组题目
    删除有序数组中的重复项简单解释一下什么是原地修改:如果不是原地修改的话,我们直接new一个int[]数组,把去重之后的元素放进这个新数组中,然后返回这个新数组即可。但是现在题目让你原地删除,不允许new新数组,只能在原数组上操作,然后返回一个长度,这样就可以通过返回的长度和原......
  • 双指针技巧秒杀七道链表题目
    合并两个有序链表我们的while循环每次比较p1和p2的大小,把较小的节点接到结果链表上,看如下GIF:形象地理解,这个算法的逻辑类似于拉拉链,l1,l2类似于拉链两侧的锯齿,指针p就好像拉链的拉索,将两个有序链表合并;或者说这个过程像蛋白酶合成蛋白质,l1,l2就好比两条氨基酸,而指......
  • 嵌入式开始之结构体,结构体指针
    ##结构体定义typedefstruct{ unsignedcharslot; //°å¿¨²Ûλ unsignedcharport_num; //°å¿¨¶Ë¿ÚÊýunsignedcharPN[30]; //°å¿¨PNºÅ unsignedcharSN[30]; //°å¿¨SNºÅ unsigned......
  • 快慢指针
    快慢指针指两个指针从同一侧开始遍历序列,且移动步长一个快一个慢,快的为快指针,慢的为慢指针。称快指针为r,慢指针为l,构成区间[l,r]。直到满足某些条件时为止。求解步骤l一般为1,r一般为0,即初始区间为[1,0],表示空区间。满足一定条件时慢指针右移,满足另一条件时快指针右移,保证区间......
  • 代码随想录算法训练营第九天| 28. 实现 strStr() 459.重复的子字符串 字符串总结 双
     28.实现strStr()给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果 needle 不是 haystack 的一部分,则返回  -1 。题目链接:28.找出字符串中第一个匹配项的下标-力扣(LeetCode)思路:标......
  • 指针扫描型字符串算法
    【最小表示法】最小表示法循环表示:从一个位置开始向后遍历,到末尾再倒回去最前面。一个字符串(数组)一共有\(n\)个。最小表示法就是最小的循环表示。例如,31491的最小表示法是13149.如果我们用打擂台比大小的方式,因为字符串之间比较需要时间,总共是\(O(n^2)\)的,太慢......
  • CEIT算法训练-双指针部分题解(T1-3)
    AnagramSearch题意简述两个字符串\(s\)和\(t\)相似的定义为:\(s\)可以打乱之后重新排列成为\(t\)。题目给出\(a\)和\(b\),问\(a\)中有多少子串(连续的一段)与\(b\)相似。同时,\(a\)中还含有\(?\)字符,他可以等价于任何字符(可以变成任何字符)解题思路实际上,根据题......
  • [word] Word文档如何设置多级标题
    我们在日常办公的时候,经常会给Word文档设置多级标题,但是一个一个的去设置又麻烦又浪费时间,今天给大家讲一下,Word文档如何设置多级标题。首先看到下方这些标题,是没有任何格式的:我们将光标放置第一个标题位置:然后点击标题一:同样,将光标放置第二个标题位置,然后点击标题二:依此类推,全部设......