问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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;的问题。

 

利用指针访问成员是用"->",利用变量访问成员用的是"."     所以你要学会这个调用方法

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
宁波社保卡办理需要什么材料 宁波社保卡如何申领 有什么高性价比的隔离霜可以推荐? 防晒效果好的隔离霜有哪些值得入手? 下雨天经常爬在房子墙上的那种软体动物,不是蜗牛没壳的,可以在墙上把身... 原来是美男啊里面插曲、主题曲都有哪些? 请问下各位大虾,我在外地用外地农行卡网上转账到本地邮政卡星期六转账的... 为什么用支付宝买东西明明我余额足够,付款时却说我余额不足?2个... 萍乡烛式过滤器品牌 衡水烛式过滤器品牌推荐 next香港官网付款提示卡号无效 按键精灵for循环加了END IF 就提示(错误码18)缺少符号Next, 红米手机第三方锁屏的问题: 安装了NEXT锁屏,已经允许了自启动,但用自带的一键清理后就无效了 sqlserver中的分页语句错误,vs提示“offset附近有语法错误,在 FETCH 语句中选项 next 的用法无效。” 请问我access为什么编译错误,无效的NEXT控件变量引用? vba 编辑错误:无效的NEXT控制变量引用 jquery中.next无效的问题 求Excel高手帮看下代码错在哪 运行显示无效的next控件变量引用倒数第二行显示缺少结束语应该怎么改 谢谢 在excel无效的Next 控件变量引用 大神们谁知道啊??、、、 无效的next控件变量引用 在excel无效的Next 控件变量引用 VB程序问题。“无效的next 控件变量引用” 无效next引用变量 个税减免首套房认定怎么办 深圳个税扣除 住房贷款可以写几套 个人所得税新政策首套住房贷款 深圳400万房子可以贷款多少钱 深圳婚前买房卖了婚后再买贷款算首套吗? 深圳2018到2022首套房贷款利率浮动? 首套房贷款优惠政策2021 为什么psp高达vs高达next有的金手指无效 急急急!EXCEL 循环NEXT 的限制 为什么ins输入了手机号点next没反应? 无效的过程调用或参数 有jsp查询数据库,已经使用rs.next(),为什么执行到rs.next()之后就显示无效游标??急急急!!!! executeUpdate无效问题 三国时期 美的热水器怎么去水垢,步骤 美的燃气热水器构造有哪些? 美的燃气热水器 怎么设定温度啊 ,火力调节和温度调节都调到最大了,... 美的空气能热水器那些系列不用镁捧的 美的电热水器F50-30G3怎么调整温度? 美的什么型号的燃气热水器好 美的JSQ20-10HA燃气热水器热水器冬天水烧不热厨房和卫生间都是温水 法制安全手抄报内容 法制安全教育手抄报内容有哪些? 法制安全手抄报怎么做? 法制安全手抄报怎么做???急急急急!!! 安全法制手抄报、、急求、、 法制安全手抄报内容!!!要初一的!!!!!急啊!!!1、未成年人保*2、交通安全