C语言 void ds_init(node **pNode)形参为两个星号是什么意思呀,
#include<stdio.h>#include<stdlib.h>typedefstructCLinkList{intdata;structCLinkList*nex...
#include <stdio.h>
#include <stdlib.h>
typedef struct CLinkList
{
int data;
struct CLinkList *next;
}node;
void ds_init(node **pNode) //这两星号是什么意思呀?指向指针的指针?
{
int item;
struct CLinkList *temp;
struct CLinkList *target;
printf("输入结点的值,输入0完成初始化\n");
while(1)
{
scanf("%d", &item);
fflush(stdin);
if(item == 0)
return;
if((*pNode) == NULL)
{ /*循环链表中只有一个结点*/
*pNode = (node*)malloc(sizeof(struct CLinkList));
if(!(*pNode))
exit(0);
(*pNode)->data = item;
(*pNode)->next = *pNode;
}
else
{
/*找到next指向第一个结点的结点*/
for(target = (*pNode); target->next != (*pNode); target = target->next)
;
/*生成一个新的结点*/
temp = (node *)malloc(sizeof(struct CLinkList));
if(!temp)
exit(0);
temp->data = item;
temp->next = *pNode;
target->next = temp;
}
}
}
int main()
{
node *pHead = NULL;
char opp;
int find;
printf("1.初始化链表 \n\n2.插入结点 \n\n3.删除结点 \n\n4.返回结点位置 \n\n5.遍历链表 \n\n0.退出 \n\n请选择你的操作:");
while(opp != '0')
{
scanf("%c", &opp);
switch(opp)
{
case '1':
ds_init(&pHead);
printf("\n");
ds_traverse(pHead);
break;
case '2':
printf("输入需要插入结点的位置?");
scanf("%d", &find);
ds_insert(&pHead, find);
printf("在位置%d插入值后:\n", find);
ds_traverse(pHead);
printf("\n");
break;
}
}
return 0;
} 展开
#include <stdlib.h>
typedef struct CLinkList
{
int data;
struct CLinkList *next;
}node;
void ds_init(node **pNode) //这两星号是什么意思呀?指向指针的指针?
{
int item;
struct CLinkList *temp;
struct CLinkList *target;
printf("输入结点的值,输入0完成初始化\n");
while(1)
{
scanf("%d", &item);
fflush(stdin);
if(item == 0)
return;
if((*pNode) == NULL)
{ /*循环链表中只有一个结点*/
*pNode = (node*)malloc(sizeof(struct CLinkList));
if(!(*pNode))
exit(0);
(*pNode)->data = item;
(*pNode)->next = *pNode;
}
else
{
/*找到next指向第一个结点的结点*/
for(target = (*pNode); target->next != (*pNode); target = target->next)
;
/*生成一个新的结点*/
temp = (node *)malloc(sizeof(struct CLinkList));
if(!temp)
exit(0);
temp->data = item;
temp->next = *pNode;
target->next = temp;
}
}
}
int main()
{
node *pHead = NULL;
char opp;
int find;
printf("1.初始化链表 \n\n2.插入结点 \n\n3.删除结点 \n\n4.返回结点位置 \n\n5.遍历链表 \n\n0.退出 \n\n请选择你的操作:");
while(opp != '0')
{
scanf("%c", &opp);
switch(opp)
{
case '1':
ds_init(&pHead);
printf("\n");
ds_traverse(pHead);
break;
case '2':
printf("输入需要插入结点的位置?");
scanf("%d", &find);
ds_insert(&pHead, find);
printf("在位置%d插入值后:\n", find);
ds_traverse(pHead);
printf("\n");
break;
}
}
return 0;
} 展开
3个回答
展开全部
两个星号叫做“二级指针”,意思就是指向指针的指针。
如果是一级指针,node *Pr,那么Pr是指向一个node结构,而node **Pr2,那么Pr2指向一个指针,而那个指针又指向一个node结构。
如果是一级指针,node *Pr,那么Pr是指向一个node结构,而node **Pr2,那么Pr2指向一个指针,而那个指针又指向一个node结构。
更多追问追答
追问
前辈能不能讲细点呀,看了后觉得有点懂了,又发现懂得不多,,,
追答
我在这里怎么说,也不能说清楚,要弄明白就买本书,仔细的把来龙去脉搞清楚。指针是C语言的精华,是最难,也是最有魅力的地方。所有的变量、数组和函数,都可以使用指针来完成,奇妙无穷。在这里讨论一两句,是不可能把C语言的指针搞明白的。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*是指针,**是指向指针的指针,而指针就是地址,一个*是指向一个变量的地址,而 ** 则是指向 * 的地址,存放的是 * 的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询