1.结构体是用来定义自己的类型,这个类型可以很复杂,也可以很简单。我们一般都是定义自己想要,方便自己编程的结构体。

2.定义结构体的一般格式为:

struct 结构名
{
  成员列表.(这里有若干个成员组成,每个成员都是这个结构的一个组成部分,对每个成员也必须作类型的声明。)
}

example:

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

3.结构体说明

  结构体是由多个元素组成,各个元素在内存中的存储空间是连续,元素的类型可以是不一样的,而数组各个元素的类型相同。结构体定义并不是定义一个变量,而是定义一种数据类型,这个数据类型可以与语言本身的简单数据类型一样,也可以是各种简单数据类型组合的一种复杂而又方便我们存储的一个整体结构。

结构体本身并不会被作为数据而开辟内存空间,真正的开辟空间的是这种结构体所定义的变量。

  那么定义一个结构体变量的空间大小由这种结构体的定义决定,是所有的分量的存储空间的总和。

4.结构体变量的定义方法如下:(用结构体来定义结构体的普通变量、指针变量和结构体数组)

方法一:定义结构体类型的时候,同时定义该类型的变量

struct  [person] /*[]表示结构体名字是可选的*/
{
     char name[50];
     char sex;
     int age; 
}p1,*ps,pers[5];

方法二:先定义结构体类型的时候,再定义该类型的变量

struct  person
{
     char name[50];
     char sex;
     int age; 
};

struct person p1,*ps,pers[5];

/*也可以用宏定义使用一个符号常量来表示一个结构类型*/
#define PER struct person;

PER
{
     char name[50];
     char sex;
     int age; 
};
PER p1,*ps,pers[5];

方法三:我们可以将结构体类型取个别名,这时候我们就可以把别名 “看成我们基本类型中的int”进行定义变量一样。

typedef struct  [person]
{
     char name[50];
     char sex;
     int age; 
}PER;

PER p1,*ps,pers[5];

5.引用结构体变量中成员

1) 结构体变量名成员名:      p1.name

2) 结构体指针变量->成员名:    ps->name

3) (*结构体指针变量)成员名: (*ps).name

4) 结构体变量数组名成员名: pers[0].name

6.注意

  当结构体变量中存放多个字符的成员,建议使用数组。如果有不知道要开辟多大的空间的时候,可以使用指针,因为我们可以拥有该区域的地址。

  结构体指针变量,在进行赋值的话就需要先进行开辟空间,通常使用malloc()进行开辟空间。

      结构体可以整体的赋值,

  如PER p1,p2; 

p1.name="can";
   p1.age=10;
         p2=p1;