陣列和指標的區別與聯絡

2021-08-16 21:15:31 字數 1200 閱讀 8983

指標和陣列的不同

1. 指標和陣列儲存的資料內容不同

指標儲存指標變數,即儲存資料的位址;陣列儲存同一型別資料的值

2. 指標用於動態資料結構,就是說指標儲存的資料可以改變;而陣列用於儲存固定數目且資料型別相同的元素即一旦陣列的大小定了就不容易變了;

3. 指標用malloc()和free()來分配空間和釋放空間,而陣列是隱式分配和刪除;

4. 指標通常指向匿名資料,而陣列自身就是陣列名

5. 陣列名作為函式引數時就等價與指標,某種意義可以說他們等價的,但是一般情況下定義乙個陣列,則陣列名就是常量是不能被改變的,一旦作為函式引數傳遞,代表位址,則它本身就變為指標變數。顯然和我們認識的陣列名有所違背。

例子:int arr

arr++;

上面兩行在一般的主函式中就會出現編譯錯誤

int fun(int arr)

arr+;

上面兩行作為函式引數是可以改變的

指標和陣列的相同點

1. 作為函式引數時陣列名就等於指標   void fun(int arr)

解釋:函式形參int arr與int *arr是等價的,也就是通常我們說的陣列名代表陣列首元素的位址,函式傳遞的是陣列首元素的位址,那麼問題來了,為什麼陣列名代表陣列首元素位址呢?

2. 表示式中的陣列名就是指標,陣列下標作為偏移量

任何能用下標完成的都可以用陣列完成即arr[i]與*(p+i)等價

陣列與指標的分配問題

陣列是開闢一塊連續的記憶體空間,陣列本身的識別符號代表整個陣列,可以用sizeof(arr)取得整個陣列的大小;指標則是只分配乙個指標大小的記憶體,並可把他的值指向某個有效的記憶體空間;這裡說明一下sizeof不是函式,相信大家都用過sizeof(int)吧。int是乙個資料型別,我們不能說sizeof 這個是函式,揭開謎底,sizeof 是乙個關鍵字。**解釋:

example of the sizeof keyword

size_t  i = sizeof( int );

struct align_depends ;     // sizeof( array ) is 20

// sizeof( array[0] ) is 4

size_t  sizearr =                        // count of items in array

sizeof( array ) / sizeof( array[0] );

陣列與指標區別和聯絡

在函式中陣列退化為指標 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語言的定義中只是一組同型別的普通變數,即使這個變數有可能是指標。所以他的作用比指標小的很多,而指標可以指向任何區的任何資料,所以就會覺得指標和陣列名很像,但是必須要注意的是,陣列名只是指標中的一種,它是指標中只...

指標陣列 陣列指標 陣列的區別與聯絡!

一 基本定義 1.指標陣列 char arr 4 arr就是我定義的乙個指標陣列,它有四個元素,每個元素是乙個char 型別的指標,這些指標存放著其對應字串的首位址。1 這個指標陣列有多大呢?答案是16個位元組,因為它是乙個指標陣列。這是廢話,正話下面說 每當出現這些問題時,腦子裡一定要第一時間反應...