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

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日

悬赏问题

  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥20 和学习数据的传参方式,选择正确的传参方式有关
  • ¥15 这是网络安全里面的poem code
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路
  • ¥15 内网办公电脑进行向日葵