m0_64391767 2022-01-16 20:54 采纳率: 88.9%
浏览 24
已结题

指针和数据结构问题?(语言-c语言)

为社么用38行到41行之间的形式表示就会报错,即注释内容
 #include <stdio.h>
#include <stdlib.h>
typedef struct student
{
    int num;
    char name[20];
    char sex;
    int score;
 }Student;
 void check(Student *stu)
 {
     Student *p;
     printf("不及格的学生成绩为:\n");
     for(p=stu;p<stu+3;p++)
     {
         if(p->score<60)
         {
             printf("%d ",p->num);
             printf("%s ",p->name);
             printf("%c ",p->sex);
             printf("%d",p->score);
             printf("\n");
         }
     }
  } 
 int main()
 {
     Student *p;
     int i;
     p=(Student *)malloc(sizeof(Student)*2);
     printf("请输入学生信息和成绩");
     for(i=0;i<3;i++)
     {
         scanf("%d",&(p+i)->num);
         scanf("%s%*c",(p+i)->name);
         scanf("%c",&(p+i)->sex);
         scanf("%d",&(p+i)->score);
         //scanf("%d",&p[i]->num);
         //scanf("%s%*c",p[i]->name);
         //scanf("%c",&p[i]->sex);
         //scanf("%d",&p[i]->score);
     }
    check(p); 
     free(p);
 return 0;
  } 


  • 写回答

2条回答 默认 最新

  • 你若向前 2022-01-17 00:34
    关注

    因为p[i]是结构变量,它的类型是Student而非Student *,所以要使用 . 而不是使用 ->

    1、首先,通过scanf扫描键盘输入来进行初始化,需要使用地址传递的方式,因此scanf函数的第二个参数,是我们想初始化的结构体中变量的地址,因此如果是数值类型,需要前边加上&符号,弄清楚这个,是为了防止&符号干扰分析
    2、其次,要清楚,p是结构体的指针,作为地址,指向结构体,而p[0]则是p指向的那个结构体。由结构指针访问到结构体中的成员,需要使用->符号,而由结构体访问到结构体中的成员,需要使用.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月25日
  • 已采纳回答 1月17日
  • 创建了问题 1月16日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog