c語言核心整理之指標與陣列的區別

2021-08-03 19:53:55 字數 925 閱讀 3045

陣列與指標

1,指標:儲存資料的位址,任何存入指標變數p的資料都會被當作位址來處理。p本身的位址由編譯器另外儲存,儲存的位置,並不知道。

陣列:儲存資料,陣列名a代表的是陣列首元素的首位址而不是陣列的首位址。&a才是整個陣列的首位址。a本身的位址由編譯器另外儲存,儲存的位置,並不知道。

2,指標:間接訪問資料,首先取得指標變數p的內容,把它作為位址,然後從這個位址提取資料或向這個位址寫入資料。指標可以以指標的形式訪問*(p+i);也可以以下標的形式訪問p[i]。但其本質上都是先取p的內容然後加上i*sizeof(型別)個byte作為資料的真正位址。

陣列:直接訪問資料,陣列名a是整個陣列的名字,陣列內每個元素並沒有名字,只能通過」具名+匿名」的方式來訪問其某個元素,不能把陣列當乙個整體來進行讀寫操作。陣列可以以指標的形式訪問*(a+i);也可以以下標的形式訪問a[i]。但其本質都是a所代表的陣列首元素的首位址加上i*sizeof(型別)個byte作為資料的真正位址。

3,指標:通常用於動態資料結構

陣列:通常用於儲存固定數目且資料型別相同的元素。

4,指標:相關的函式為malloc和free

陣列:隱式分配和刪除

5,指標:通常指向匿名資料(當然也可指向具名資料)

陣列:自身即為陣列名

tips:

1)陣列具有確定數量的元素,而指標只是乙個標量值。編譯器用陣列名來記住這些屬性。只有當陣列名在表示式中使用時,編譯器才會為他產生乙個指標常量。

2)宣告乙個陣列時,編譯器將根據宣告所指定的元素數量為陣列保留記憶體空間,然後再建立陣列名,它的值是乙個常量,指向這段空間的起始位置;

宣告乙個指標變數時,編譯器只為指標本身保留記憶體空間,它並不為任何任何整型值分配記憶體空間,而且,指標變數並未被初始化為指向任何現有的記憶體空間,如果它是乙個自動變數,它甚至根本不會被初始化。

C語言核心之陣列和指標詳解

指標 接下來看如何定義乙個指標,既然指標也是乙個變數,那麼它的定義也和其它變數一樣定義 如 int p 是間接定址或間接引用運算子。上例中我們還看到了乙個特別的運算子 它是乙個取位址運算子 在其他合適場合 也是按位運算運算子,為取交集運算子 在上面的指標定義中,我們看到了定義的是乙個整型指標,難道指...

C語言基礎整理復現 指標陣列 陣列指標

指標陣列本質是陣列,只不過這個陣列裡的元素都是指標元素。陣列指標本質是指標,這個指標指向陣列。看乙個表示式是陣列指標還是指標陣列,關鍵在於核心通過優先順序比較,最先跟誰結合。int p 1 通過優先順序比較,上述表示式的核心p會先合結合,因此上述表示式的本質應該是陣列,其次加上 後,這個表示式可確定...

C語言指標陣列與陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...