结构体知识总结

一、结构体

#include  "stdio.h"

#include  "string.h"

//1.声明一个结构体类型

struct student

{

         int id;

         char name;

}; //注意此处的分号,因为这是一条语句

struct student stu;  //2.给struct student类型定义一个变量

 

int main()

{

         //3.对结构体成员赋值

         stu.id=1542101;

         stu.name='a';

        //4.打印对应数值

         printf("stu.id=%d\nstu.name=%c\n",stu.id,stu.name);

         return 0;

struct 为结构体关键字,student 是这个结构体的类型名,id  name 是结构体的成员。

所以,我们就有了struct student 这一种类型, 类比int 类型一样,都是类型。

//----------------------------------------------------------------------------------------------------------------

// int a;                int是一种类型,a是变量;

// struct student stu;    struct student 是一种类型,stu是变量(结构体变量);  

//----------------------------------------------------------------------------------------------------------------

上面声明一个结构体和给结构体定义变量是分开,可以结合一起,在声明类型的同时定义变量。

#include "stdio.h"

#include "string.h"

 

//1.声明一个结构体类型

struct student

{

         int id;    //结构体成员

         char name;

 

} stu; //2.给结构体类型定义变量

 

int main()

{       

         //3.对结构体成员赋值

         stu.id=1542101;

         stu.name='a';

 

        //4.打印对应的值

         printf("stu.id=%d\nstu.name=%c\n",stu.id,stu.name);

         return 0;

}

 

 

 

 

这种方法定义结构体,后续可以根据需要定义新的变量,如 ZhangSan

 

 

 

# 声明的时候除去student会怎么样呢?

 

 

 

 

结果如下:

 

 

 

 

结果显示,打印正常,可是想再定义一个新的结构体变量ZhangSan的时候,本来是struct student ZhangSan的,现在student除去了,自然定义不了。

 

那怎么办呢?

可以利用typedef关键字,typedef可以为数据类型定义一个别名。如typedef unsigned char uchar;

则uchar 就是unsigned char 的别名。

 

#include "stdio.h"

#include "string.h"

 

//1.声明一个结构体类型

typedef struct

{

         int id;    //结构体成员

         char name;

 

}student; //注意:此时student是结构体类型

 

student stu;   //定义结构体变量

student ZhangSan;

 

int main()

{       

         //3.对结构体成员赋值

         stu.id=1542101;

         stu.name='a';

         ZhangSan.id=12580;

         ZhangSan.name='A';

 

    //4.打印对应的值

         printf("stu.id=%d\nstu.name=%c\n",stu.id,stu.name);

         printf("ZhangSan.id=%d\nZhangSan.name=%c\n",ZhangSan.id,ZhangSan.name);

         return 0;

}

 

 

 

 

使用typedef之后,不能直接使用student.num,因为student不是变量,而是结构体类型。所以,我们可以用student作为数据类型来定义新的变量,如student stu; 。

 

#include "stdio.h"

#include "string.h"

 

//1.声明一个结构体类型

typedef struct Student

{

         int id;    //结构体成员

         char name;

 

} student; //此时student是结构体类型

 

student stu;   //定义结构体变量

student ZhangSan;

 

int main()

{       

         //3.对结构体成员赋值

         stu.id=1542101;

         stu.name='a';

         ZhangSan.id=12580;

         ZhangSan.name='A';

 

    //4.打印对应的值

         printf("stu.id=%d\nstu.name=%c\n",stu.id,stu.name);

         printf("ZhangSan.id=%d\nZhangSan.name=%c\n",ZhangSan.id,ZhangSan.name);

         return 0;

}

 

一般typedef struct 后面我都不会省略Student,习惯了typedef struct Student。此刻student 就是struct Student的一个别名。 实现效果一样。

 

 

 

 

二、结构体指针

我们知道,指针可以指向任何的类型。回忆一下指针的知识:

 

 

 

 

那么结构体指针变量也是类似:

 

#include "stdio.h"

#include "string.h"

 

//1.声明一个结构体类型

typedef struct Student

{

         int id;       //结构体成员

         char name;

}student;        //此时student是结构体类型

 

student jay;           //2.定义结构体变量jay

student* point=&jay;   //3.定义结构体指针变量point,指向jay变量

 

int main()

{       

         jay.id=123;      //4.通过结构体变量给成员变量id赋值

         printf("id=%d\n",jay.id);  

         printf("id=%d\n",(*point).id);

 

         point->id=456;   //5.通过结构体指针给成员变量id赋值

    printf("id=%d\n",(*point).id); 

         printf("id=%d\n",point->id); //.的优先级大于*

 

         return 0;

}

 

 // (*point).id和point->id的效果是一样的,(*point).id太麻烦,一般我们都用point->id ,简洁明了。

 

 

 

 

从上面的看到声明了结构体类型后,定义了结构体变量jay,再定义结构体指针point,并指向jay,

还有没其他写法?

 

#include "stdio.h"

#include "string.h"

 

//声明一个结构体类型

typedef struct Student

{

         int id;       //结构体成员

         char name;

 

}student,*pstu ;   //student相当于struct Student,pstu相当于struct Student*

 

student jay;       //相当于struct Student jay

pstu point = &jay;  //相当于struct Student * point

 

int main()

{       

         point->id=789; //赋值

         printf("id=%d\n",point->id);

         return 0;

}

 

 

 

 

定义函数来赋值,进行函数调用,怎么写的呢?

 

#include "stdio.h"

#include "string.h"

 

//声明一个结构体类型

typedef struct Student

{

         int id;       //结构体成员

         char name;

}student;   //此时student是结构体类型

 

student jay;  //定义结构体变量jay     

 

//定义一个函数来赋值,参数类型为student,形参是指针

void student_test(student *someone) {

         someone->id=111;  //赋值

}

 

int main()

{       

    student_test(&jay);     //传入实参:结构体变量jay的地址

    printf("id=%d\n",jay.id);

    return 0;

}

 

 

 

我们再来改一下:

#include "stdio.h"

#include "string.h"

 

//声明一个结构体类型

typedef struct Student

{

         int id;          //结构体成员

         char name;

}student;   //此时student是结构体类型

 

student jay;          //定义结构体变量jay

student* point=&jay;   //定义结构体指针变量point,指向jay

 

//定义一个函数来赋值,参数类型为student,形参是指针

void student_test(student *someone)

{

         someone->id=111;         //赋值

}

 

int main()

{       

     student_test(point);              //传入实参:结构体指针变量point

     printf("id=%d\n",jay.id);

     printf("id=%d\n",point->id);

     return 0;

}

 

posted on 2020-05-08 16:12  轨迹1995  阅读(585)  评论(0编辑  收藏  举报