Zeng-fh 2022-02-07 11:31 采纳率: 89.8%
浏览 42
已结题

这两道题怎么分析呀,有关结构体的

题一

struct st{int x;int*y;}*pt;
int a[]={1,2},b[]={3,4};
struct st c[2]={10,a,20,b};
pt=c
//以下选项中表达式值为11的是
//A)   ++pt->x
//B)   pt->x
//C)   *pt->y
//D)   (pt++)->x

题二

#include <stdio.h>
typedef struct{int num;char name[10];int score;}PER;
void fun(PER x[])
{
    int t;
    if(x[0].score>x[1].score)
    {
        t=x[0].score;x[0].score=x[1].score;x[1].score=t;
    }
}
main()
{
    PER s[2]={{1001,"zhang",621},{1002,"wang",585}};
    int i;
    fun(s);
    for(i=0;i<2;i++)
       printf("%d,%s,%d,",s[i].num,s[i].name,s[i].score);
}

img

  • 写回答

3条回答 默认 最新

  • a5156520 2022-02-07 12:09
    关注

    下面是我的理解,供你参考:

    
    
    #include <stdio.h>
    typedef struct{int num;char name[10];int score;}PER;
    void fun(PER x[])
    {
        int t;
        if(x[0].score>x[1].score)
        {
            t=x[0].score;x[0].score=x[1].score;x[1].score=t;
        }
    }
    
    
    
    
    main()
    {
        PER s[2]={{1001,"zhang",621},{1002,"wang",585}};
        int i;
        //调用fun函数的作用是按从大到小时排序结构指针指向的当前结构(x[0])和后面一个结构 (x[1])的值 
        fun(s);
        //然后打印排序后的结构数组 
        for(i=0;i<2;i++)
           printf("%d,%s,%d,",s[i].num,s[i].name,s[i].score);
           
           
           
           
        struct st{int x;int*y;}*pt;
        int a[]={1,2},b[]={3,4};
        struct st c[2]={10,a,20,b};
        pt=c;
    //    printf("\n%d\n",++pt->x) ;
        //以下选项中表达式值为11的是
        //根据运算符优先级,先执行pt->x ,
        //pt为结构指针,其地址为 第一个结构的地址,所以pt>x 值一个结构的x,即10
        //然后执行前缀++操作,10变成11,所以答案是A。 
        //A)   ++pt->x  
        
        //10
    //    printf("pt->x=%d\n",pt->x); 
    //这里pt同上指向第一个结构,然后pt->x为第一个结构的x的值,即10 
        //B)   pt->x
        
        //1
        //pt->y的优先级大于*,所以先执行pt->y,
        //又pt->y为第一个结构的int指针y,即指针a,后面执行*pt->y的结果为数组a的首地址指向int的值,即1 
    //    printf("*pt->y=%d\n",*pt->y); 
        //C)   *pt->y
        
        //10
        //这里我如果理解错误的话应该同样先执行->x,然后执行(pt++),这里pt++为使用pt的值后再增加pt++的值,
        //所以 (pt++)->x的结果是第一个结构的x的值,即10,然后pt指向下一个结构。 
        printf("(pt++)->x=%d\n",);     
        //D)   (pt++)->x
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 创建了问题 2月7日

悬赏问题

  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据