C语言结构体

结构体

1、什么是结构体

基本数据类型:int char float double short long unsigned (一个变量)

数组:很多个变量 只能保存一种类型的数据

结构体:也是一种数据类型,这种数据类型,是程序员自己定义。可以包含多种数据类型。

2、声明结构体

struct students ------------------->struct students 就是一种数据类型 int char float
{
​  char name[12]; ---------------->结构体的成员“;”结束
​  int  number;
​  char sex[5];
};-------------------------------->结构体以“;”结束

struct students 就是一种数据类型 int char float

Struct 定义结构体的关键字

Students 结构体名 (自己命名)

3、结构体变量的声明

3.1、先声明结构体类型,再定义变量

Int a;float b;

struct students student1;

结构体变量名也是自己命名的。

3.2、在声明结构体的同时定义变量

struct students  //int float
{
  char name[12];
  int  number;
  char sex[5];
}student2;

3.3、直接定义结构体变量

struct
{
   char name[12];
   int  number;
   char sex[5];
}student2;

4、结构体变量的初始化

在声明结构体变量的时候进行初始化

struct students student2 = { "Liangren", 30, "男" }; 

struct students
{
   char  name[12];
   int   number;
   char  sex[5];
}student1 = {"Meung",28,"男"};

struct students
{
  char   name[12];
  int    number;
  char   sex[5];
 struct data  birthday;
}student1 = { "Meung", 28, "nan", 1995, 5, 20 },
student2 = { "Hucheng", 20, "男", 2000, 6, 15 },
student3 = { "Gragon", 15, "男", 2005, 8, 16 };

在{}里面,数据初始化的顺序,应该跟结构体成员的顺序保持一致。

5、结构体变量的引用

对于结构体变量的引用不能采用整体。

“.”---->成员运算符

结构体变量.成员名

printf("%s\n",student1.name);
printf("%d\n", student1.number);
printf("%s\n", student1.sex);

注意:结构体同样可以包含另一个结构体类型

struct data
{
  int year;
  int month;
  int day;
}; 

struct students
{
    char  name[12];
    int   number;
    char  sex[5];
   struct data  birthday;
}student1 = { "Meung", 28, "nan", 1995, 5, 20 };

int main()
{    
     printf("%s\n",student1.name);
     printf("%d\n", student1.number);
     printf("%s\n", student1.sex);
     printf("%s\n", student1.birthday.year);
     return 0;
}

6、结构体数组

结构体数组的定义和初始化

跟结构体变量的这个定义是一样的。

初始化也是一样。

struct students
{
   char  name[12];
​  int  number;
​  char  sex[5];
​  struct data  birthday;
}student[3] ={
    { "Meung", 28, "nan", 1995, 5, 20 },
    { "Hucheng", 20, "男", 2000, 6, 15 },
​   { "Gragon", 15, "男", 2005, 8, 16 } }; 

struct students student[3]={ 
    { "Meung", 28, "nan", 1995, 5, 20 },
​   { "Hucheng", 20, "男", 2000, 6, 15 },
​   { "Gragon", 15, "男", 2005, 8, 16 } };

引用:student[0].成员名。

7、结构体数组的存放

数组的存放都是连续的内存。一个结构一个结构的去存放。(注意)

8、结构体和指针

8.1指向结构体变量的指针。

定义及初始化:

struct students *p = &student1;
struct students *p;
p = &student1;

引用:

1用指针运算符去找到结构体变量,用成员运算符找到成员。(一定注意要加括号)

(*p).birthday.year
(*p).结构体成员 一定要加括号 “.”优先级最高

2用指向运算符去访问成员。

 p->birthday.year
 printf("%d\n", (*p).birthday.year);
​ printf("%s\n", (*p).sex);
​ printf("%s\n", (*p).name);
​ printf("%d\n", p->birthday.year);
​ printf("%s\n", p->sex);
 printf("%s\n", p->name); 

8.2 指向结构体数组的指针。

定义:

struct students *p = student;
struct students *p; 
p = student;
p=student[0];

引用:

printf("%s\n", (p+1)->name); //whorld
printf("%s\n", (*(p + 1)).name); //whorld
posted @ 2020-02-21 10:17  乾子  阅读(200)  评论(0编辑  收藏  举报