关于指针的问题
/*初始化循环链表*/void ds_init(node **pNode)//对结点的值初始化,*pNode是对结点的引用,是指针类型的变量,**pNode是*pNode所指向的变量的值
//也就是那个结构体定义的结点
{
int item;
node *temp;
node *target;
printf("输入结点的值,输入0完成初始化\n");
while(1)
{
scanf("%d", &item);
fflush(stdin);
if(item == 0)
return;
if((*pNode) == NULL)//初始化第一个结点,*pNode是指针类型变量,指向的是第一个结点,第一个结点空执行if里面的
{
*pNode = (node*)malloc(sizeof(struct CLinkList));//为指向的结点分配空间
if(!(*pNode))//如果分配不成功,退出
exit(0);
(*pNode)->data = item;//如果分配成功,则赋值给data域
(*pNode)->next = *pNode;//首尾相连
//这时候还只有一个结点
}
else
{
//已经有结点了
/*找到next指向第一个结点的结点*/
for(target = (*pNode); target->next != (*pNode); target = target->next)
;
//进行第一步的时候target指向的就是if里面生成的那第一个结点
//这句for循环后面有逗号,表示条件不满足了才继续往下执行
/*生成一个新的结点*/
temp = (node *)malloc(sizeof(struct CLinkList));
if(!temp)
exit(0);
temp->data = item;
temp->next = *pNode;//把新生成的结点接在原来的结点前面
target->next = temp;//target指向的是原来的结点,现在把原来结点的next域指向新生成的结点,相当于又成了循环链表
}
}
}
楼上正解我 就不回答 了 看看 C++推荐使用引用来代替指针。。。。。如果是C那还是用二级指针吧,实际上,指针传递也是值传递!!!只不过指针的值是一个地址值
页:
[1]