學習c語言資料結構的一些預備知識

2021-09-10 01:41:55 字數 1797 閱讀 8910

資料結構 --   筆記

預備知識

一.指標

我們將記憶體中位元組的編號稱為位址(address)或指標(pointer)。位址從 0 開始依次增加,對於 32 位環境,程式能夠使用的記憶體為 4gb,最小的位址為 0,最大的位址為 0xffffffff。

c語言用變數來儲存資料,用函式來定義一段可以重複使用的**,它們最終都要放到記憶體中才能供 cpu 使用。

資料和**都以二進位制的形式儲存在記憶體中,計算機無法從格式上區分某塊記憶體到底儲存的是資料還是**。當程式被載入到記憶體後,作業系統會給不同的記憶體塊指定不同的許可權,擁有讀取和執行許可權的記憶體塊就是**,而擁有讀取和寫入許可權(也可能只有讀取許可權)的記憶體塊就是資料。

cpu 只能通過位址來取得記憶體中的**和資料,程式在執行過程中會告知 cpu 要執行的**以及要讀寫的資料的位址。如果程式不小心出錯,或者開發者有意為之,在 cpu 要寫入資料時給它乙個**區域的位址,就會發生記憶體訪問錯誤。這種記憶體訪問錯誤會被硬體和作業系統攔截,強制程式崩潰,程式設計師沒有挽救的機會。

cpu 訪問記憶體時需要的是位址,而不是變數名和函式名!變數名和函式名只是位址的一種助記符,當原始檔被編譯和鏈結成可執行程式後,它們都會被替換成位址。編譯和鏈結過程的一項重要任務就是找到這些名稱所對應的位址。

假設變數 a、b、c 在記憶體中的位址分別是 0x1000、0x2000、0x3000,那麼加法運算c = a + b;將會被轉換成類似下面的形式:

0x3000 = (0x1000) + (0x2000);

( )表示取值操作,整個表示式的意思是,取出位址 0x1000 和 0x2000 上的值,將它們相加,把相加的結果賦值給位址為 0x3000 的記憶體

需要注意的是,雖然變數名、函式名、字串名和陣列名在本質上是一樣的,它們都是位址的助記符,但在編寫**的過程中,我們認為變數名表示的是資料本身,而函式名、字串名和陣列名表示的是**塊或資料塊的首位址。

二.結構體

1.結構體是使用者根據自己需要定義的資料型別

例如:

struct或

typedef struct student;//分號不能省略

int main()

;st.age=20;//第一種方式

printf("%d %s %d\n",st.sid,st.name,st.age);//訪問結構體內部時應通過自定義資料型別元素名稱加.的方式   而不能直接使用st

st.name="lisi";//這樣是錯誤的   字串的賦值應用strcpy(st.name,"lisi");

//初始化字串時可以直接用』=『初始化

//第二種方式

struct student *pst;

pst=&st;//pst指向st的首位址

pst->sid=99;//等價於(*pst).std  而*pst等價於st   總體 等價於st.sid

}結構體也是一種資料型別,它由程式設計師自己定義,可以包含多個其他型別的資料。

2.如何使用結構體

struct student st=;

st.age=20;//第一種方式

struct student *pst;

pst=&st;

即1.st.sid

2.pst->sid    pst所指向結構體變數中sid這個成員

3.注意事項

1.結構體變數不能加減乘除,但能相互賦值   如st1=st2

像 int、float、char 等是由c語言本身提供的資料型別,不能再進行分拆,我們稱之為基本資料型別;而結構體可以包含多個基本型別的資料,也可以包含其他的結構體,我們將它稱為複雜資料型別或構造資料型別。

結構體變數

關於資料結構的一些預備知識

在這裡 應該是用c語言來進行編寫 關於指標的知識 int p p 指的是 乙個指標變數 是乙個變數名字 int 表示該p變數只能儲存int型別變數的位址 int pint i 10 int j p i 這個含義就是將i的位址傳送給p 則意味著p指向i p 則就是i變數 修改p或是i的值 並不會對雙方...

c語言資料結構預備知識

1 定義 a.位址 記憶體單元的編號 從0開始的非負整數 b.指標 指標就是位址,位址就是指標 指標變數是存放記憶體單元位址的變數 指標的本質是乙個操作受限的非負整數 2 基本型別的指標int i 10 int p i 等價於int p p i p 11 printf d d i,p 11 11總結...

基於C語言資料結構 一些錯誤

include stdio.h include malloc.h define maxsize 50 typedef char elemtype typedef struct lnode linklist void initlist linklist l void getelem linklist ...