“对于 int 型的二级指针变量,它既可以指向同类型的一级指针变量,也可以指向同类型的普通(非指针)变量。”
为什么这句话是错的呢?
参考GPT和自己的思路:这句话是错的,因为二级指针变量只能指向同类型的一级指针变量,而不能指向普通(非指针)变量。普通变量没有地址,因此二级指针无法指向它。
不知道你这个问题是否已经解决, 如果还没有解决的话:这个和指针的引用原理一样,我主要分享给你们使用的形式
注意调用的时候实参要加“&”符,例:CreateDouList(&L,n);
void CreateDouList(LinkList *L, int n)
{
LinkList ptr;
int i;
*L = (LinkList)malloc(sizeof(DousList)); //为头结点申请空间
(*L)->next = NULL;
(*L)->head = NULL;
(*L)->data = n;//L->data记录结点的个数
ptr = (*L);
printf("开始插入数据:\n");
for (i = 0; i < n; i++)
{
int value = 0;
scanf("%d",&value);
LinkList me = (LinkList)malloc(sizeof(DouNode));
me->data = value; //节点数据域
me->next = NULL;
me->head = NULL;
ptr->next = me;
me->head = ptr;
ptr = ptr->next; //尾插法建表
}
}
这里形参列表的参数是 LinkList *L,和DousLIst **L效果一样,是一个二级指针。如果用到指向链表的指针就需要一次接引用操作,写成(*L)的形式。然后再去分配空间、进行初始化、赋值给链表指针ptr等操作,这样链表二级指针L的改变也会使实参的链表发生改变,可以查看调试结果。
调试结果: