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