1. 程式人生 > >記憶體管理之結構體

記憶體管理之結構體

記憶體管理之結構體

資料結構這門學問的意義

      資料結構就是研究資料如何組織(在記憶體中排布),如何加工的學間。... 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中的成員方法。