内存管理之结构体

1、数据结构是什么?
就是用来组织和加工数据的一门学问。数据结构中最重要的就是数据,数据结构本质
上就是研究数据在内存中如何组织、处理的问题。

2、数组与内存的关系?
为什么引进数组? 因为有许多意义相关、类型相同的变量如果一个一个定义比较麻
烦,也不利于代码的维护。所以就引进了数组这么个数据结构。数组名就是数组首元
素的首地址,然后数组可以通过下标访问,因为数组 中元素的类型都是相同的,
知道首地址后可以直接推算出任意元素的地址。
缺点:1.数组的元素类型必须相同;2.数组的大小必须在定义时给定,且不可更改。

3、结构体与数组、内存的关系?
为了将意义相关、类型不同的变量组织在一起,引进了结构体这种数据结构。可以说
数组就是结构体的一种特例。
比如要定义三个学生的成绩,有2种方法:
(1)用数组定义 int grades[3];
(2)用结构体定义

struct grades
{
    int grade1;
    int grade2;
    int grade3;
};
struct grades stu1;

在这种情况下,2种方法都可以,但用数组更简洁方便。
如果定义的数据结构中的变量类型不相同,则只能使用结构体而不能使用数组。
比如:

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

由于结构体中的变量数据类型不相同,所以不能像数组一样直接用下标访问,需
要用a.age这样的方式访问才能找到变量的地址。

4、在结构体中内嵌函数指针实现类(面向对象)

C语言是面向过程的,C++、java是面向对象的,C语言也可以实现面向对象,只是
比较麻烦,而C++、java的语言本身就实现了这种机制。

struct people
{
    int age;
    void (* pFunc)(void); //函数指针指向void func(void)这样的函数
};

在这种情况下结构体中的普通变量可以看做是类中的成员变量,函数指针可以看
做是类中的成员函数,所以简单实现了OOP的类封装。