鱼C论坛

 找回密码
 立即注册
查看: 4695|回复: 2

C语言 关于结构体与共用体 小甲鱼老师的例题求解

[复制链接]
发表于 2013-5-12 15:04:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个程序是小甲鱼老师在《零基础c语言入门》里面056第十章结构体与共用体04里面的一个例题。。把视频看了几遍还是不懂。。请各位友友帮忙。。下面有我不懂的地方,讲解一下。

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

#define LEN sizeof(struct student)  /* student结构的大小*/

struct student *creat();            /*创建链表*/
void print(struct student *head);   /*打印链表*/

struct student
{
      int num;
      float score;
      struct student *next;
};

int n; /*全局变量,用来记录存放了多少数据。*/

void main()
{
      struct student *stu;

      stu = creat();
      print( stu );

      printf("\n\n");
      system("pause");
      getch();
}

struct student *creat()
{
      struct student *head;
      struct student *p1, *p2;

      p1 = p2 = (struct student *)malloc(LEN);  /*LEN是student结构的大小*/

      printf("Please enter the num :");
      scanf("%d", &p1->num);
      printf("Please enter the score :");
      scanf("%f", &p1->score);

      head = NULL;     
      n = 0;   

      while( 0 != p1->num )
      {
            n++;
            if( 1 == n )
            {
                  head = p1;                 
            }
            else
            {
                  p2->next = p1;
            }

            p2 = p1;

            p1 = (struct student *)malloc(LEN);

            printf("\nPlease enter the num :");
            scanf("%d", &p1->num);
            printf("Please enter the score :");
            scanf("%f", &p1->score);
      }

      p2->next = NULL;

      return head;
}

void print(struct student *head)
{
      struct student *p;
      printf("\nThere are %d records!\n\n", n);

      p = head;
      if( NULL != head )
      {
            do
            {
                  printf("学号为 %d 的成绩是: %f\n", p->num, p->score);
                  p = p->next;
            }while( NULL != p );
      }
}








#define LEN sizeof(struct student)


p1 = p2 = (struct student *)malloc(LEN);  /*LEN是student结构的大小*/



else            {                  p2->next = p1;                                         这里的p2->next = p1; 是指p2的next 指向 p1的结点,还是指向p1所                    }                                                                        在的全部数据?下面为什么还要将p2=p1?
            p2 = p1;
p1 = (struct student *)malloc(LEN);
这是几处我所不懂的地方,请友友们帮忙讲解一下,

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-12 15:29:10 | 显示全部楼层
p2->next = p1;因为next是指针变量存放的是p1的地址
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-5-13 20:15:36 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-28 14:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表