c語言 陣列和指標間的聯絡與區別(10)

2021-07-15 09:20:53 字數 1158 閱讀 7759

例如,在某個函式的形參裡,會有char ptr[100],這時編譯器會將它預設看成是char * ptr,在函式裡面可以自增,即ptr++

類似地,char src[3][100]也可以被看做是char *src[100]

//傳二維陣列,用一維陣列指標

//若此時*(src + i),即src[i],是加的100步長

//所以中括號裡的100不可以省略,不然不知道步長是多少

由此可見,char src[2][3][100],可看做是char *src[3][100]

值得注意的是,char *ptr[3],可看做是char **ptr

//因為這傳的是乙個指標陣列,所以要將陣列裡的元素即指標儲存起來,一般儲存的都是位址,所以要用指標,所以要用指標來儲存陣列裡的指標,即用指標的指標來儲存。

//**ptr 有兩種解釋,一種就是指標變數的位址,一種就是陣列指標。

//指標陣列裡的指標都是野指標,要利用規避野指標的方法來應對

空間分配:

陣列:是一種靜態分配(靜態儲存區或棧空間)

指標:是一種動態分配(堆空間)

訪問效率

陣列:直接訪問值(更高)

指標:間接訪問值

安全性

陣列:可能會出現陣列越界(更高)

指標:可能會造成記憶體洩漏

函式形參

陣列:一維陣列用指標存放,二維陣列用一維指標存放

處理物件

陣列:偏向於對值的處理

指標:偏向於對機器數的處理

空間連續性

陣列:一定是連續的空間

指標:不一定是連續的空間

常見的記憶體錯誤及對策(在重要步驟下printf提示資訊或者用gdb來找段錯誤)

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

2、記憶體分配雖成功,但尚未初始化就引用了他

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

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

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

C語言 指標和陣列的聯絡與區別

陣列 陣列和指標的區別和聯絡 指標首先是一種資料型別,使用它定義的變數稱為指標變數,指標變數是專門用來存放位址的。以int a為例 a就是乙個指標變數,a變數存放乙個int型別資料的位址。a變數的大小根據編譯器使用32位方式編譯還是64位方式編譯分別對應4個位元組和8個位元組。1 指標 整數 以in...

陣列與指標區別和聯絡

在函式中陣列退化為指標 int ar int n sizeof ar sizeof ar 0 ar 0 100 ar 0 100 for int i 0 iprintf d d d n ar i ar i i ar ar i ar i i ar 輸出三列相同的值 int p ar 正確 int p ...

陣列和指標的區別與聯絡

區別 c語言把記憶體劃分成四個區,它把一般的變數和陣列等存在於記憶體中的棧區,所以陣列在c語言的定義中只是一組同型別的普通變數,即使這個變數有可能是指標。所以他的作用比指標小的很多,而指標可以指向任何區的任何資料,所以就會覺得指標和陣列名很像,但是必須要注意的是,陣列名只是指標中的一種,它是指標中只...