轻功水上漂zz 2024-08-30 18:33 采纳率: 59.4%
浏览 2
已结题

求解!结构体小问题1

想问大家一个关于结构体的问题:(*p).num此时这个p可以理解成行指针吗?也就是说p是指向这一整个结构体变量一整块。
就是书上这块,这样理解对嘛
如果这样理解没错的话,为什么下面这个代码,它上面 readrec(&st[k]) 那里应该是行指针,然后函数用了一个指向结构体的指针来接受,下面gets函数就直接用的是rec.name了是怎么回事,我想的是(*rec).name来能调用成员呀,另外name是个数组 那就是成员地址

img

img

  • 写回答

3条回答 默认 最新

  • 吃不了席 2024-08-30 18:36
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    首先,关于结构体指针的问题,(*p).num 可以理解为 p 是一个指向结构体的指针,然后通过 *p 访问结构体的成员 num。所以 p 确实是一个指向结构体变量的指针。

    至于你提到的代码问题,readrec 函数的参数应该是一个指向结构体的指针,所以在调用 readrec(&st[k]) 时,传入的是 st[k] 的地址,即指向结构体数组中的一个元素的指针。在 readrec 函数内部,可以直接使用 rec->name 来访问结构体的成员 name,因为 rec 是一个指向结构体的指针。同样地,rec->num、rec->s 和 rec->ave 也可以直接访问。

    所以,你的理解是正确的,下面这段代码中,readrec 函数接受一个指向结构体的指针作为参数,然后在函数内部直接使用 rec->name 等成员访问方式。

    #include <stdio.h>
    struct stud
    {
        char num[5], name[10];
        int s[4];
        int ave;
    };
    int main()
    {
        struct stud st[30];
        int i, k;
        for (k = 0; k < 10; k++)
            readrec(&st[k]);
        writerec(st);
        return 0;
    }
    readrec(struct stud *rec)
    {
        int i, sum;
        char ch;
        gets(rec->num);
        gets(rec->name);
        for (i = 0; i < 4; i++)
            scanf("%d", &rec->s[i]);
        ch = getchar(); // 跳过输入数据最后的回车符
        sum = 0;
        for (i = 0; i < 4; i++)
            sum += rec->s[i];
        rec->ave = sum / 4.0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月8日
  • 已采纳回答 8月31日
  • 创建了问题 8月30日