c的多级指针
指针的本质就是一个普通变量,它的值表示的是一个内存地址,这个地址中可能存放了其它变量。那么二级指针其实也是一个普通的变量,这个变量中同样也存放了一个内存地址,而这个内存地址是一个指针变量的地址
比如:
int a = 0;
int b = 1;
int *p = &a;
int **p2 = &p;
*(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语言编程的过程中,如果遇到需要修改指针的值,使它指向另外一个节点,或变量,与其使用大量代码直接修改它的值,不如使用它的二级指针,直接修改其地址值,会大大减少代码冗余,提高代码质量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2018-02-04 莫烦python课程里面的bug修复;课程爬虫小练习爬百度百科