为什么我这里的编译器用引用符号反而是错误的 我用c语言写的后面改成*也报错 但是我看大家都说要修改指针的值得加引用我也是非常认同 但是今天实操却发生这样的问题 不加星却可以完成头插法建立链表
上面这幅图是加了引用符号报错的 下面这个是不加反而能运行的
这是结构体的代码
不用引用肯定可以头插法啊,返回值那边返回表头即可。但是你这个根本不是头插。
因为引用应该携带地址。
这个Linklist是指针变量,不是数据类型,把上面定义结构体的代码发出来看看。
供参考:方法一
//方法一:
#include<stdio.h>
#define max 10
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*Linklist;
int data[max]={1,2,3,4,5,6,7,8,9,0};
Linklist creatlist(Linklist L)
{
L = (Linklist)malloc(sizeof(Lnode));
if(L == NULL) printf("false");
L->next=NULL;
Linklist s;
int i;
for(i=0;i<max;i++) {
s =(Lnode*)malloc(sizeof(Lnode));
s->data=data[i];
s->next=L->next;
L->next = s;
}
return L;
}
int main()
{
Linklist L,p;
L = creatlist(L);
p = L->next;
while(p){
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return 0;
}
方法二:
//方法二:地址引用
#include<stdio.h>
#define max 10
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*Linklist;
int data[max]={1,2,3,4,5,6,7,8,9,0};
Linklist creatlist(Linklist& L)
{
L = (Linklist)malloc(sizeof(Lnode));
if(L == NULL) printf("false");
L->next=NULL;
Linklist s;
int i;
for(i=0;i<max;i++) {
s =(Lnode*)malloc(sizeof(Lnode));
s->data=data[i];
s->next=L->next;
L->next = s;
}
}
int main()
{
Linklist L,p;
creatlist(L);
p = L->next;
while(p){
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return 0;
}
方法三:
//方法三:地址传参
#include<stdio.h>
#define max 10
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*Linklist;
int data[max]={1,2,3,4,5,6,7,8,9,0};
Linklist creatlist(Linklist* L)
{
(*L) = (Linklist)malloc(sizeof(Lnode));
if((*L) == NULL) printf("false");
(*L)->next=NULL;
Linklist s;
int i;
for(i=0;i<max;i++) {
s =(Lnode*)malloc(sizeof(Lnode));
s->data=data[i];
s->next=(*L)->next;
(*L)->next = s;
}
}
int main()
{
Linklist L,p;
creatlist(&L);
p = L->next;
while(p){
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return 0;
}
同时有一点要注意:
你加&相当于引用,而引用是C++中的概念,通俗的说就是给变量起别名。而引用不能作用与一级指针