用户自定义结构体(1)

我们常用数据类型有 int、char、double、float等等!但是有时候我们再做课程设计的时候,常常会有一大堆的用户数据,比如一个学生的数据有:学号,姓名,年龄,性别,出生日期,以及一大堆数据需要输入,如果我们在函数内一个一个定义的话,代码就会显得很乱,不方便后期对代码的修改!我们可以简单的举一个例子:
#include <stdio.h>
int main()
{
    int num; ///学号
    char name[20];        //名字
    char sex;              //性别
    int age;              //年龄
    int year;            //出生年
    int mouth;           //出生月
    int day;               //出生日

   return 0;
}

这样一长串代码在后期赋值调用中十分的不方便,此时我就可在函数写一个用户自定义结构体、其中其中用户自定义结构体定义方法有:

struct student
    {
     int num; ///学号
    char name[20];        //名字
    char sex;              //性别
    int age;              //年龄
    int year;            //出生年
    int mouth;           //出生月
    int day;               //出生日
};

其中student为数据类型

typedef struct 
    {
    int num; ///学号
    char name[20];        //名字
    char sex;              //性别
    int age;              //年龄
    int year;            //出生年
    int mouth;           //出生月
    int day;               //出生日
}student;

而这个定义的方法中在struct 前添加了个typedef 表示这个类型的重命名,命名为student;此时我还要注意下列这种定义:

struct 
{
         int num; ///学号
        char name[20];        //名字
        char sex;              //性别
        int age;              //年龄
        int year;            //出生年
        int mouth;           //出生月
        int day;               //出生日
}student1;

此时student1就不是数据类型了,而是以个变量(重点强调是变量),当我们想在函数体内再声明一个和student1一模一样的变量时,这是做不到的,因为该结构体没有给出结构体名称,我们是无法调用该类型名来声明变量。

接下来可以声明student类型的变量,例如student    stu1;这时候我们就可以对stu1变量进行赋值,赋值的方法如下

{
    struct student stu1 = {1001,"孙昊",'M',12,2000,6,23};    //此赋值的顺序是依照结构体内部顺序来赋值的
}

也可以进行如下声明:

{
    struct student stu1;
    stu1.num = 1001;
    stu1.name = "孙昊";
    stu1.sex = 'M';
    stu1.age = 12;
    stu1.year = 2000;
    stu1.mouth = 6;
    stu1.day = 23;

}

当我们声明一个指针变量时,赋值的方式也有所不同:

{
        struct student *stu;
        stu->num = 1001;
        stu->name = "孙昊";
        stu->sex = 'M';
        stu->age = 12;
        stu->year = 2000;
        stu->mouth = 6;
        stu->day = 23;
}

由此我们可以看出(*stu).num  与  stu->num等价;


猜你喜欢

转载自blog.csdn.net/wcao_error/article/details/80028402