33,321
社区成员




void setA(int* &a)
{
a = new int;//申请内存后a的地址改变了,假如改变后的地址为0x00345b
*a = 3;//0x00345b这块区域上的值改变为3
return;
}
int main(void)
{
int * a = NULL;
setA(a);//传入时a的地址为0x000000
//如果不使用引用传递,那么setA函数返回后a的地址还是0x000000
//那么printf中的*a就出错了,如果用引用传值的话,a的地址就变成了
//0x00345b,和setA函数中的一样,那么printf中的*a就是3,不会出错
//于链表也是同样的道理。
printf("%d", *a);
return 0;
}
这应该是C++的语法吧。引用,通过这种方法可以函数参数传递将链表头结点L的值修改。
void createlist_L(linklist &L, int n)
{
linklist p;
L=(linklist)malloc(sizeof(Lnode)); //因为L在函数内部已经被修改,所以传递引用才能在函数结束后传递进去
//的实参才能被实际改变
如果是C语言只有传递指针
void createlist_L(linklist *L, int n)
{
linklist p;
(*L)=(linklist)malloc(sizeof(Lnode));
(*L)->next=NULL;
for (int i=n;i>0;--i)
{
p=(linklist)malloc(sizeof(Lnode));
printf("请输入链表的第%d个数!\n",i);
scanf("%d",&p->date);
p->next = (*L)->next;
L(*L)->next = p;
}
}