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