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;
}

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

ptr本来就没有用,后面代码里根本没有它