指標及其應用(二)

2021-07-15 13:19:31 字數 1467 閱讀 8102

一、多維指標

一維指標儲存基本變數的位址

二維指標儲存一維指標變數的位址

三維指標儲存二維指標變數的位址

三、指標和陣列的區別

1、空間分配上:陣列是靜態分配的,指標是動態分配的

2、訪問效率上:陣列訪問效率更高,指標訪問效率較低

3、傳參時:接收的形參均是指標

4、安全性:陣列容易造成越界,指標容易導致記憶體洩漏

四、陣列的傳參

傳一維陣列名,用陣列元素的指標來接

傳二維陣列名,用一維陣列的指標來接

傳三維陣列名,用二維陣列的指標來接

傳指標陣列,用指標的指標接

五、野指標的避免

1、當定義乙個指標,且該指標沒有指向時,將其置為空。

2、當要往指標指向的空間賦值時,先看是否給它分配了合法的空間。

六、取值和取位址的區別

int a[1000] = ;

同理:1、對二維陣列的陣列名取位址等於二維陣列的位址。

對二維陣列的位址取值等於首個一維陣列的位址。

2、對三維陣列的陣列名取位址等於三維陣列的位址。

對三維陣列的位址取值等於首個二維陣列的位址。

七、為了加深對陣列的理解,舉乙個三維數字的例子:

*(*(*(a+i)+j)+k):

a+i:第

i+1個二維陣列的位址

*(a+i):第

i+1個二維陣列的首個一維陣列的位址

*(a+i)+j:第

i+1個二維陣列的第

j+1個一維陣列的位址

*(*(a+i)+j):第

i+1個二維陣列的第

j+1個一維陣列的首元素的位址

*(*(a+i)+j)+k:第

i+1個二維陣列的第

j+1個一維陣列的第

k+1個元素的位址

*(*(*(a+i)+j)+k):第

i+1個二維陣列的第

j+1個一維陣列的第

k+1個元素的數值

八、常見的記憶體錯誤

1、記憶體分配未成功,卻使用了它。

2、記憶體雖然分配成功,但是尚未初始化就引用它。

3、記憶體分配成功並且已經初始化,但操作越過了記憶體邊界。

4、忘記了釋放記憶體,造成記憶體洩漏。

5、釋放了記憶體卻繼續使用它。

九、記憶體錯誤的應對方法以及用malloc

分配空間的步驟

1、分配記憶體空間。   

2、檢查分配是否成功。若分配成功,則返回記憶體的首位址;若分配失敗,則返回

null

,並退出程式。   

3、清空分配好的空間的資料,即原來的記憶體中的資料。(使用

malloc

或bzero

函式)   

4、使用記憶體。   

5、使用完記憶體之後,需要釋放記憶體。   

6、對指標置空。若釋放記憶體之後不將指標置空,這時如果繼續使用該指標,指標會成為野指標。

指標及其應用(一)

2 指標的長度 指標的長度時固定的,任何型別的指標都是4 位元組。原因 所有的指標都用來儲存位址,而在作業系統中,位址的長度是固定的,因為位址的長度是由作業系統的位數決定的。32 位的作業系統中是 4位元組,64位的作業系統中 是 8位元組。3 指標的運算子 和 運算子 通常稱為間接引用運算子,它返...

c語言,指標,及其應用

既然指標變數的值是乙個位址,那麼這個位址不僅可以是變數的位址,也可以是其它資料結構的位址。在乙個指標變數中存放乙個陣列或乙個函式的首位址有何意義呢?因為陣列或函式都是連續存放的。通過訪問指標變數取得了陣列或函式的首位址,也就找到了該陣列或函式。這樣一來,凡是出現陣列,函式的地方都可以用乙個指標變數來...

9 3函式指標及其應用

函式指標是指向函式的指標,指向儲存這個函式第一條指令的位址,稱為函式的入口位址。int ascending int a,int b int descending int a,int b void selectionsort int a,int n,int compare int a,int b if...