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

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日

悬赏问题

  • ¥20 MATLAB间接平差计算
  • ¥50 nw.js调用activex
  • ¥15 数据库获取信息反馈出错,直接查询了ref字段并且还使用了User文档的_id而不是自己的
  • ¥15 将安全信息用到以下对象时发生以下错误:c:dumpstack.log.tmp 另一个程序正在使用此文件,因此无法访问
  • ¥15 速度位置规划实现精确定位的问题
  • ¥15 代码问题:df = pd.read_excel('c:\User\18343\Desktop\wpsdata.xlxs')路径读不到
  • ¥15 为什么视频算法现在全是动作识别?
  • ¥15 编写一段matlab代码
  • ¥15 用Python做岩石类别鉴定软件
  • ¥15 关于调取、提交更新数据库记录的问题