C语言二级指针的理解
一级指针作用相当于C++中的&(引用),不是完全一样。
下面的程序是单链表的尾插法。
#include<stdio.h>
#include<malloc.h>
typedef struct lnode{
double score;
struct lnode *next;
}lnode,*linklist;
void func(linklist **a){//当然也可以用linklist &a,下面的*a就要换成a
printf("请输入小数:");
double score;
scanf("%lf",&score);
*a = (linklist)malloc(sizeof(lnode));//a的地址要发生变化,所以必须用c语言的二级指针
lnode *p;
lnode *last = *a;
while(score!=0){
p = (linklist)malloc(sizeof(lnode));
p->score = score;
printf("%lf\n",p->score);
last->next = p;
last = p;
printf("请输入小数:");
scanf("%lf",&score);
}
last->next = NULL;
}
int main(){
linklist p;
func(&p);//指针p的地址
p=p->next;
while(p!=NULL){
printf("%lf ",p->score);
p=p->next;
}
return 0;
}
总结:反正理解是上面这样理解,真正用的时候,想到指针的地址要发生变化,就用二级指针或者引用,用引用更方便一些。