#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
struct book
{
int name; //问题:链表引用问题
struct book *next;
};
typedef book *b;
//定义结构体
createhead(b &head)//这里必须加引用
{
head=(b)malloc(sizeof(book));
if(!head) // 存储分配失败
{
exit(0);
}
head->next=NULL;
}
addbody(b head,int a)//这里可不加引用
{
b l,pnew,ptail;
l=head;
while(l->next)
{
l=l->next;
}
pnew=(b)malloc(sizeof(book));
pnew->name=a;
pnew->next=NULL;
l->next=pnew;
}
void main()
{
int a,n;
b head,i;
createhead(head);
scanf("%d",&n);
while(n)
{
scanf("%d",&a);
addbody(head,a);
n--;
}
i=head->next;
while(i)
{
printf("%d ",i->name);
i=i->next;
}
}
将一个结构体变量中的数据传递给另一个函数,有下列3种方法:
1.用结构体变量名作参数。一般较少用这种方法。
2.用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
3.用结构体变量的引用变量作函数参数
typedef LNode *LinkList;这样定义后linklist就为一个结构体指针,
开辟空间时(linklist)malloc。。。那个linklist后面就不用加星号了
也可以typedef struct LNode{
...
}*LinkList
效果是一样的
总结:
第一个传参:
结构体指针做调用函数的参数时,为了能在主函数中保持改变,形参必须是指针的指针或者引用。
和非指针变量作参数一样,要想在主函数中通过调用函数来改变某值,必须传过来指针。而指针做参数时,必须传过来指针的指针。
第二个传参:
因为头节点没必要改变,所以直接传指针,不用引用。