C语言----结构与联合(基础篇十一)

    更新中...

  结构的作用

    ※处理大量的数据,除了使用数组外,还有一个方法,就是使用结构。

    ※以前我们只学过int,double,char等几种类型,学了结构以后,程序员就可以定义自己的类型。

    ※从二维表格理解结构(见Excel演示)

C语言----结构与联合(基础篇十一)

 

  结构类型的定义

    定义格式:

      struct 结构名

        {

          成员表列

        }变量名表列;

     

    结构名”和“变量名表列”可省略,初学者在使用结构时,一般可省略后面的变量名表列,以便于理解。

      如:

        struct student

        {

          char name[20]; /*姓名*/

          char sex[3]; /*性别*/

          int age; /*年龄*/

        };

 

    ※上面定义了一个结构student,中间是此结构的3个成员变量。记住,它们不可以赋初值,目前只是个躯壳。

 

    ※那么什么时候才能给里面的成员赋值呢?那就是定义此结构类型的变量。

 

    ※结构在定义时,后面的分号不可少。

  结构变量

    定义格式:

      struct 结构名 变量名;

        如:

        struct student stu;

     此处的stu就是一个student类型的变量。和数组一样,它也可以在定义的时候初始化,但是格式有些不同:

     struct student stu={“张三”,”男”,23};

       注意:结构变量初始化,必须根据成员变量的类型逐个赋初值,而数组中所有的元素都是赋同样类型的值。

  使用结构变量

    结构变量不能直接引用,必须使用·号对结构中的成员变量进行操作,如:

      stu.age=18; /*赋值*/

      printf(“%d”,stu.age); /*打印*/

    ※成员变量像普通变量一样可进行数学运算。


    程序1

      学生结构

// 11_1学生结构体

#include <stdio.h>
#include <string.h>


struct student   //定义变量
{
    char name[20];
    char sex[3];
    int age;
};

int main()
{
    struct student stu;
    struct student stu1 = {"李四","",19};      //变量赋值
    struct student stu2 = {"王二麻子","",25};

    stu.age = 23;
    strcpy(stu.name, "张三");   //字符串赋值
    strcpy(stu.sex, "");

    puts(stu.name);    //字符串输出函数
    printf("%d\n", stu.age);


}

 

  联合

    在“我的电脑->文件夹选项”中有两种按钮,圆形的是单选按钮,方形的是多选按钮。结构就类似于多选按钮,你可以同时使用其中多个成员变量。联合就相当于单选按钮,无论何时,你只能使用其中一个成员变量,并且只有最后一次      设置的成员变量有效。

     结构 与 联合的区别:

      结构相当于多选框,可以选择多种变量。

      联合相当于单选框,只能选择一个变量,并且变量是以最后的使用为依据的。

    联合的定义格式与结构差不多,只是前面的struct改成union。除此之外,联合还有以下特点:

    

    ※只能对联合的第一个成员进行初始化。

      如:  

      union un

      {

        int i;

        double d;

      }un1={10};       //只能初始化一个变量,联合是单选。

    ※联合变量的地址和它的各成员都是同一地址,因为它是“联合”。

    ※联合与结构之间可以嵌套定义


    程序2

      网友在互通QQ的时候,通常不是给号码就是给昵称,如何用联合来表达?

 

// 11-2-QQ联合 网友在互通QQ的时候,通常不是给号码就是给昵称,如何用联合来表达?

#include <stdio.h>
#include <string.h>
union QQ
{
    char name[20];
    long number;
};

int main()
{
    union QQ qq;    //定义QQ变量

    strcpy(qq.name, "优雅の疯子");

    printf("%s\n", qq.name);



    qq.number = 787228754;
    printf("%ld\n", qq.number);
    printf("%s\n", qq.name);

}

 

 


// 11-3结构体   有3个学生结构变量,从中找出年龄最大的那个学生,并打印出这个学生的姓名、性别、年龄。
#include <stdio.h>
#include<string.h>

struct student
{
    char name[20];
    char sex[3];
    int age;
};


int main()
{
    struct student stumax;        //年龄最大的学生
    struct student stu1 = {"小明","",28};
    struct student stu2 = {"7Don","",25};
    struct student stu3 = {"小红","",18};
    

    stumax = stu1;                //年龄最大的学生始终都在stumax中
    if (stumax.age < stu2.age)        //这里要注意比较的时候是比结构中的年龄
        stumax = stu2;            //赋值的时候是直接赋值结构
    if (stumax.age < stu3.age)
        stumax = stu3;
    printf("%s,%s,%d\n", stumax.name, stumax.sex, stumax.age);    /*只能将元素一个一个地输出*/
}

 

C语言----结构与联合(基础篇十一)

上一篇:(c++)两个类相互包含引用的问题


下一篇:javax.websocket.server.ServerContainer not available