c的多级指针

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

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

posted on 2024-02-04 17:02  张博的博客  阅读(13)  评论(0编辑  收藏  举报

导航