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 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据