1、数据结构这门学问的意义
数据结构就是研究数据如何组织(在内存中排布),如何加工的学问
2、最简单的数据结构:数组
为什么要有数组?
因为程序中有好多个类型相同、意义相关的变量需要管理,这时候如果用单独的变量来做程序的话,
就会比较混乱,所以用数组来管理会更好。
譬如: int ages[20];
3、数组的优势和缺陷
优势:数组比较简单,访问可以用下标,并且可以随机访问。
缺陷:1.数组中的所有元素必须相同 2.数组的大小必须定义的时候给出,而且一旦确定不能更改。
4、结构体
结构体的出现就是为了解决数组的第一个缺陷:数组中的所有元素必须相同。
譬如我们要管理三个学生的年龄:
第一种用数组: int ages[3];
第二种用结构体:
struct ages
{
int age1;
int age2;
int age3;
}
struct ages age;
这个时候就是用数组表示比较好;但是如果数据包中的元素类型不一样,这时就需要用结构体而不能用数组了。
struct people
{
int age; //人的年龄
int height; //人的身高
char name[20]; //人的名字
}
这个时候数据包中有多个类型的元素,用数组就不能表示了,就要用结构体。
5、结构体内嵌指针实现面向对象
面向过程和面向对象。
总的来说:C语言是面向过程的,但是C语言写出来的Linux系统是面向对象的。
非面向对象的语言,也能实现面向对象的代码。只能说如果用面向对象的语言来实现面向对象对更加简单、清晰、直观。
用C++、Java等面向对象的语言来实现面向对象会简单一些,因为语言本身帮助我们做了很多事情;但是
用C来实现面向对象很麻烦,而且不容易理解,这也就是为什么大多数学过C语言却看不懂Linux内核代码的原因。
struct s
{
int age; //普通变量
void (*pFunc)(void); //函数指针,指向void func(void)这类的函数
}
使用这样的结构体就可以实现面向对象。
这样包含了函数指针的结构体就类似于面向对象中的class,结构体中的变量类似于class中的成员变量,结构体中的函数指针
类似于class中的成员函数(成员方法)。