資料結構之預備知識

2022-04-12 22:55:26 字數 2463 閱讀 9412

指標是c語言的靈魂
####位址

-記憶體單元的編號

-從零開始的非負整數

-範圍:0-ffffffff(0 - 4g-1)

####指標

-指標就是位址,位址就是指標

-指標變數是存放記憶體單元位址的變數

-指標的本質是乙個操作受限的非負整數

####分類

1.基本型別指標

基本概念:

int i = 10;

int *p = &i;//等價於 int *p; p = &i;

詳解操作:

1)p存放了i的位址,所以我們說p指向i

2)p和i是兩個完全不同的變數,修改其中任意乙個變數的值,不影響另乙個

3)p指向i,*p就是i變數本身,更形象的說所有出現*p的地方都可以換成i反之亦然

修改乙個值不會影響另乙個的值

2.*p等價於i。或者說*p和i可以在任何地方互換

3.如果乙個指標變數指向了乙個普通變數,則*指標變數 就完全等價於 該普通變數

、 注意:指標變數也是變數,只不過他存的不能是記憶體單元的內容,而是記憶體單元的位址,

普通變數前不能加*

常量和表示式不能加&

?:如何通過被調函式修改主調函式中普通變數的值

- 實參為相關變數的位址

- 形參為以該變數的型別為指標的指標變數

- 在被調函式中通過*形參變數名 的方式就可以修改主函式中的普通變數

2.指標和陣列

指標和一維陣列

陣列名是乙個指標常量

他存放的是一維陣列第乙個元素的位址

他的值不能被改變

一維陣列名指向的是陣列的第乙個元素

下標和指標的關係:

a[i]   <<==>>  *(a+i)

假設指標變數的名字為p

則p+i的值是p+i*(p所指向的變數所占用的位元組數)

指標變數的運算:

指標變數不能相加乘除。

如果兩指標變數屬於同一陣列,則可以相減

指標變數可以加減乙個整數,前提是最終結果不能超過指標允許指向的範圍

p+i 的值是 p+i*(p所指向的變數所佔的位元組數)

p-i 的值是 p-i*(p所指向的變數所佔的位元組數)

p++ <<==>> p+1

p-- <<==>> p-1

舉例:如何通過被調函式修改主調函式中一維陣列的內容(如何界定一維陣列)

兩個引數

存放陣列首元素位址的指標變數

存放陣列元素長度的整形變數

不管是什麼型別的變數,如果需要使用被呼叫函式改變主呼叫函式的變數,只需要將實參寫為他的位址,然後在被呼叫函式中進行變化

為了表示一些複雜的資料,而普通的基本型別變數無法滿足要求
結構體是使用者根據自己的實際需要自己定義的復合資料型別
兩種方式:

struts student st = ;

struts student *pst = &st;

1.st.id=...

2.pst->id = ...

pst所指向的結構體變數中的id這個成員

1.結構體變數不能加減乘除,但能夠相互賦值

2.普通結構體和結構體指標變數作為函式傳參的問題

###動態構造一k陣列

假設動態構造乙個int型陣列

int *p = (int*)malloc(sizeof(int)*len);//這一句主要就是給int型陣列分配空間

1.malloc只有乙個int性的引數,表示要求系統分配的位元組數

2.malloc函式的功能是請求系統len個位元組的記憶體空間,如果請求分配成功則返回第乙個位元組的位址,如果分配不成功,則返回null

3.malloc函式能且只能返回第乙個位元組的位址,所以我們需要把這個無實際意義的第乙個位元組的位址(俗稱幹位址)轉換為乙個有實際意義的

int *p = (int *) malloc(50);

表示將系統分配好的50個位元組的第乙個位元組的位址轉化為int * 型的位址,更準確的說是把第乙個位元組的位址轉化為四個位元組的位址,這樣

p就指向了第乙個的四個位元組,p+1就指向了第二個的四個位元組,p+i就指向了第i+1個四個位元組,p[0]就是第乙個元素,p[i]就是第i+1個元素。

double *p =(double *)malloc(80);

表示將系統分配好的80個位元組的第乙個位元組的位址轉化為double 8 型的位址,更準確的說是把第乙個位元組的位址轉化為8個位元組的位址,這樣p就指向了

第乙個8個位元組,p+1就指向了第二個的8個位元組p+i就指向了第i+1個的8個位元組,p[0]就是第乙個元素,p[i]就是第i+1個元素。

free(p) 釋放p所指向的記憶體,而不是釋放p本身所占用的記憶體。

《資料結構》(c 版)預備知識

a1.數學術語 序列 乙個長度為n的序列是將n個元素按一定的線性順序住址起來,其特點是 1.序列中的元素有固定的順序 2.序列中的元素可以重複。向下取整 在c 中用函式floor實現。向上取整 在c 中用函式ceil實現。取模 取模是對整數的操作,它得到整除後非負的餘數,用a mod b表示,其中b...

初識資料結構 預備知識

資料 資料是對客觀事物符號的總稱,指所有能輸入到計算機中並被計算機處理的符號的總稱。資料的含義極為廣泛,如聲音,影象等都可以通過編碼而歸於資料的範疇。資料元素 資料元素是資料的基本單位在計算機中通常作為乙個整體進行考慮和處理。有時候,乙個資料元素可以由若干個資料項組成,資料項是資料不可分割的最小單位...

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總結...