我们常用数据类型有 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等价;