内存管理之结构体

内存管理之结构体

数据结构这门学问的意义

      数据结构就是研究数据如何组织(在内存中排布),如何加工的学间。...4.1.6.2、最简单的数据结构:数组

      为什么要有数组?因为程序中有好多个类型相同、意义相关的变量需要管理n这时候如果用单独的变量来做程序看起来比较乱,用数组来管理会更好管理。譬如int ages[20];

数组的优势和缺陷

      优势:数组比较简单,访问用下标,可以随机访问。

      缺陷: 1数组中所有元素类型必须相同; 2数组大小必须定义时给出,而且一旦确定不能再改。
 

结构体隆重登场

结构体发明出来就是为了解决数组的第1个缺陷,数组中所有元素类型必须相同

我们要管理3个学生的年龄(int类型),怎么办?

第一种解法,用数组 int  ages[3];

第二种解法,用结构体

struct ages

{

  int agel;

  int age2;

  int age3;

};

struct ages age; 

分析总结:在这个示例中,数组要比结构体好。但是不能得出结论说数组就比结构体好,在包中元素类型不同时就只能用结构体而不能用数组了

struct people

{

  int age; //人的年龄

  char name [20] ; //人的姓名

  height; //人的身高

};

因为people的各个元素类型不完全相同,所以必须用结构体,没法用数组。

结构体内嵌指针实现面向对象面向过程与面向对象

总的来说:c语言是面向过程的,但是c语言写出的linux系统是面向对象的。

非面向对象的语言,不一定不能实现面向对象的代码。只是说用面向对象的语言来实现面向对象要更加简单一些直观一些、无脑一些。

用C++、Java等 面向对象的语言来实现面向对象简单一些,因为语言本身帮我们做了很多事情,但是用c来实现面向对象很麻烦,看起来也不容易理解,这就是为什么大多数人学过c语言却看不懂linux内核代码的原因。

struct 3

{

  int age; //普通变量

  void (*pFunc) (void); //函数指针,指向void func (void)这类的函数

}

使用这样的结构体就可以实现面向对象。

这样包含了函数指针的结构体就类似于面向对象中的class,结构体中的变量类似于class中的成员变量,结构体中的函数指针类似于class中的成员方法。

原文地址:https://www.cnblogs.com/sanshijvshi/p/10264539.html