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

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 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加