慧咕咕 2022-12-19 16:47 采纳率: 87%
浏览 339
已结题

C语言下面两个函数中的结构体指针变量ptr有什么作用,直接用subj不可以么?


typedef struct subjects        //定义结构体叫作SUB,在后面就可以直接使用
{
     int num;                 //课程编号
     char name[30];           //课程名称
     char kind[20];           //课程性质
     int stime;               //总学时
     int ttime;               //授课学时
     int etime;               //实验或上机学时
     int score;               //学分
     int term;                //开课学期
     struct subjects *next;
}SUB;

void* myInsert(SUB *subj)  //链表插入操作  
{
    SUB *ptr,*ptr2;
    ptr=subj;//要传入的节点
     if(head==NULL)//头节点为空,说明链表为空链表
     {
         head=ptr;//将头节点设置为要传入的节点
         head->next=NULL;//指针域设为空
     }
     else//链表不为空
     {
         for(ptr2=head;ptr2;ptr2=ptr2->next)//从链表头开始找,找到目前最后一个节点
        {        
            if(ptr2->next==NULL)//若当前ptr2是链表最后一个节点
             {
                 ptr2->next=subj;//在链表尾增加一个节点subj
                 subj->next=NULL;//将新节点的指针域置为空结束链表
                 break;
             }
         }
     }
    return head;
}
void *insert()//插入课程信息 
{
     SUB *ptr,*subj;     //定义结构体指针指向这个结构体SUB
     int size=sizeof(SUB);
     char ch,ch1;
     while(ch!='0')
        {
              subj=(SUB *)malloc(size); //(分配类型 *)malloc(分配元素个数 *sizeof(分配类型))如果成功,则返回该空间首地址,该空间没有初始化,如果失败,则返回0
              ptr=subj;
              printf("输入要插入的课程信息:\n");
              printf("\n\t\t请输入课程编号:");
              scanf("%d",&subj->num);   
              printf("\n\t\t请输入课程名称:");
              scanf("%s",&subj->name);  
              printf("\n\t\t请输入课程性质:");
              scanf("%s",&subj->kind);  
              printf("\n\t\t请输入总学时:");
              scanf("%d",&subj->stime);
              printf("\n\t\t请输入授课学时:");
              scanf("%d",&subj->ttime);
              printf("\n\t\t请输入实践或上机学时:");
              scanf("%d",&subj->etime);
              printf("\n\t\t请输入学分:");
              scanf("%d",&subj->score);
              printf("\n\t\t请输入开课学期:");
              scanf("%d",&subj->term);
              myInsert(subj);//插入课程
              printf("\n添加完毕,新信息存入文件中\n");
              printf("\n继续插入请按回车\n");
              printf("\n结束添加课程按 0: [ ]\b\b");
              ch1=getchar(); //将回车键赋给ch1,否则subj->term输完后输入的回车键会赋给ch,因此用ch1填补。
              ch=getchar();
        }
     return head;
}

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-12-19 16:52
    关注

    head=ptr 这个可以用head = subj
    ptr2不可以用subj,因为ptr2只是一个循环变量指针而已,搜索链表尾,然后其next指向subj
    第二个中ptr完全是垃圾变量,删掉它

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

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月19日
  • 已采纳回答 12月19日
  • 创建了问题 12月19日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵