C报错 在非结构或联合中请求成员‘next’
发布网友
发布时间:2022-04-23 02:47
我来回答
共1个回答
热心网友
时间:2023-10-12 06:53
#include <stdio.h>
#include <stdlib.h>
struct lt
{
char *name;
int value;
struct lt *next;
};
typedef struct lt linktable;
//linktable *a=(lbt *)malloc(sizeof(lbt));
int initlinktable(linktable **a)
{
*a = (linktable *)malloc(sizeof(linktable));
if(*a == NULL)
{
//malloc failed
return 1;
}
(*a)->next=NULL;//括号
(*a)->name=(char *)malloc(sizeof(char)*5);//括号
(*a)->name='\0';//括号
(*a)->value=0;//括号
return 0;
}
int addlinktable(linktable **a,unsigned int jump)
{
linktable *p = *a;
linktable *q;
int i = 0;
for(i=0;i<jump;i++)
{
p = p->next;
if(p == NULL)
{
//p == NULL means error in the loop(int jump too large)
return 1;
}
}
q = p->next;
p->next = (linktable *)malloc(sizeof(linktable));
p->next->name=(char *)malloc(sizeof(char)*5);
*(p->next->name)='\0';
(p->next->value)=0;//不用*
p->next->next = q;
return 0;
}
int setvalue(linktable **a,unsigned int jump,int value)
{
linktable *p = *a;
//linktable *q;
int i = 0;
for(i=0;i<jump;i++)
{
p = p->next;
if(p == NULL)
{
//p == NULL means error in the loop(int jump too large)
return 1;
}
}
p->value = value;
}
int main(int argc,char **argv)
{
linktable *a;
if(initlinktable(&a))
{
printf("[INIT]malloc failed\n");
return 1;
}
addlinktable(&a,0);
setvalue(&a,0,100);
printf("A:%d\n",a->value);//不用*
return 0;
}
测试结果:
追问不能分析下我这个程序的错误吗,就单改程序,说下为什么不用*什么的。
追答
指针调用成员变量的时候用->就可以访问了,如访问value时直接用指针加->value就可以访问了,访问name时加*是因为name是指针。(*a)->next=NULL;//括号 是因为你之前的优先级出了点问题:
->的优先级高于*导致(*a->next)=NULL理解成了*(a->next)=NULL;的问题。
利用指针访问成员是用"->",利用变量访问成员用的是"." 所以你要学会这个调用方法