在说结构体之前,我们先来看看类型和变量
比如 int a;
int是类型名,a是变量名
变量名是我们自己定义的,可以改成其他名字,但是int,char这些类型名是不能修改的
而结构体可以让我们自己定义类型名
下面我们来定义一个student类型,一个chen变量
例子
struct student //结构体
{
int age;//成员
int score;
};
struct student chen;//student是类型名,chen是变量名
我们创建了一个叫student的结构体类型名,然后可以用这个结构体来定义一个叫做chen的变量。
对比一下struct student chen和int a,其中struct是结构体类型,
而student等同于int,chen等同于a
实际上省略struct直接写成student chen也不会报错,但是一般还是要加上struct来声明这是一个结构体类型
更简单的方法是下面这样
struct student //结构体
{
int age;//成员
int score;
}chen;
直接声明了一个student类型的chen变量
下面来看看用法
struct student//类型
{
int age;//成员
int score;
};//注意不要漏掉冒号
student chen={19,100}; //赋值,chen的age是19,chen的score是100
printf("%d\n",chen.age);
printf("%d\n",chen.score);
/*
输出结果:
19
100
Press any key to continue
*/
要使用结构体里的成员,首先要定义一个该结构体的变量(例子中的student chen),然后用变量名.成员名(例子中的chen.age)。
注意不要和类型名搞混,写成student.age。
赋值可以用student chen={19,100}; 19和100会分别赋值给变量chen的age和score
当然也可以用chen.age=19,chen.score=100;来赋值
如果你用的是简写的方法
也可以在定义结构体的时候就赋值
struct student//类型
{
int age;//成员
int score;
}chen={19,100};
下面来看看typedef
之前的例子类型名是struct student,如果想省略stucrt怎么办呢
定义结构体还有一种方法
typedef struct
{
int age;//成员
int score;
}student;//类型名
student chen;//定义变量
上面用了typedef关键字,然后把struct后面的类型名student放到了下面,这样,定义变量的时候就不用写struct了
但是,用这种方法的话,要注意不要把类型名和变量名搞混
我们对比一下
//普通方法
struct student
{
int age;//成员
int score;
}chen;//变量名
chen.age=19;
-----------------------------------------------------------------------------------------------------------
//用typedef的方法
typedef struct
{
int age;//成员
int score;
}student;//类型名
student chen;//定义变量名
chen.age=19;//正确
student.age=19;//错误!!
用了typedef的话,类型名student放在了下面,这里原本是放变量名chen的地方,所以容易弄乱,因为要使用结构体里的成员,需要变量名.成员,像上面那样把类型名student误以为是变量名就会写成student.age然后出错