结构体与共用体02 – 零基础入门学习C语言54

第十章:结构体与共用体02

让编程改变世界

Change the world by program

结构体变量的初始化

我们可以这么对结构体进行初始化!

例子01:

include

void main()

{

      struct student    /定义结构/

      {            

            int num;            

            char *name;            

            char sex;            

            float score;            

      }boy1, boy2 = { 102, "Jane", 'M', 98.5 };

      boy1 = boy2;

      printf("Number = %dnName = %snScore = %dn", boy1.num, boy1.name, boy1.score);

      printf("nn");

      printf("Number = %dnName = %snScore = %dn", boy2.num, boy2.name, boy2.score);

}

结构体数组

一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。

如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。

结构体数组与以前介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员(分量)项。

实例学习:通讯录.exe (点击下载)

定义结构体数组

和定义结构体变量的方法相仿,只需说明其为数组即可。例如:

struct student

{

    int num;

    char name[20];

    char sex;

    int age;

    float score;

    char addr[30];

};

struct student student[3];

也可以这样:

struct student

{

    int num;

    char name[20];

    char sex;

    int age;

    float score;

    char addr[30];

}student[3];

与其他类型的数组一样,对结构体数组可以初始化。

例如:

struct student

{

        int num;

        char name[20];

        char sex;     

          int age;

        float score;

        char addr[30];

}stu[2] = {{101,″LiLin″,′M′,18,87.5,″Beijing″},        {102,″Zhang″,′F′,19,99,″Shanghai″}};

当然,数组的初始化也可以用以下形式:

struct student

{

    int num;

};

struct student str[]{{…},{…},{…}};

即先声明结构体类型,然后定义数组为该结构体类型,在定义数组时初始化。

结构体数组应用实例

例题:对候选人得票的统计程序。设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。

演示及作业:投票系统.exe (点击下载)

指向结构体类型数据的指针

一个结构体变量的指针就是该结构体变量所占据的内存段的起始地址。

可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。(指针伟大吧,指啥都行~)

指针变量也可以用来指向结构体数组中的元素。

结构指针变量说明的一般形式为:

struct 结构名 *结构指针变量名

例如,在前面的例题中定义了stu这个结构,如要说明一个指向stu的指针变量pstu,可写为:

struct stu *pstu;

当然也可在定义stu结构时同时说明pstu。与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后才能使用。

赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。

如果boy是被说明为stu类型的结构变量,则:

pstu=&boy

是正确的。

pstu=&stu

是错误的。

但是为什么呢?

因为,结构名和结构变量是两个不同的概念,不能混淆。结构名只能表示一个结构形式,编译系统并不对它分配内存空间。

只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。

因此上面&stu这种写法是错误的,不可能去取一个结构名的首地址。有了结构指针变量,就能更方便地访问结构变量的各个成员。

其访问的一般形式为:

(*结构指针变量).成员名

或为:

结构指针变量->成员名

例如:

(*pstu).num

或者:

pstu->num

下面通过一个简单例子来说明指向结构体变量的指针变量的应用。

include

struct stu

{      

      int num;     

      char *name;      

      char sex;      

      float score;      

} boy1 = {102, "Fishc", 'M', 78.5};

void main()

{

      struct stu *pstu;

      pstu = &boy1;

      printf("Number = %dnName = %sn", boy1.num, boy1.name);      

      printf("Sex = %cnScore = %fnn", boy1.sex, boy1.score);      

      printf("Number = %dnName = %sn", (pstu).num, (pstu).name);      

      printf("Sex = %cnScore = %fnn", (pstu).sex, (pstu).score);      

      printf("Number = %dnName = %sn", pstu->num, pstu->name);      

      printf("Sex = %cnScore = %fnn", pstu->sex, pstu->score);      

}

视频下载
技术, IT技术, 视频教程, C语言

原文发布于宽客论坛,点击阅读原文

风险提示及免责条款

市场有风险,投资需谨慎。本文不构成个人投资建议,也未考虑到个别用户特殊的投资目标、财务状况或需要。用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击下方“内容举报”进行投诉反馈!
立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部