指標和陣列

2021-10-03 14:04:52 字數 3389 閱讀 4307

首先我們看一段**,在程式設計中是否遇到過這樣的情況?

我們可以看到使用陣列名和使用指標的效果一樣。

那是否就能說明陣列和指標有某種關係,甚至是一樣的呢?

實際上指標和陣列毫無關係。

首先,陣列是陣列變數型別,指標式指標變數型別,從變數型別角度來說就不同。

陣列名是沒有單獨開闢空間的,而指標開闢了自己的空間,這就是他們最大的不同。

陣列傳參時,會發生降維(降維成指向其內部元素型別的指標),既然能夠降維成指標,則說明兩者不同。

他們在使用上不過是有一定相似性罷了。

有了上面的經驗,我們也就可以知道了:

int arr[10]

=;int*p = arr;

是可以執行通過的!

由於上例,我們可以知道,指標和陣列在使用上有相似性,而指標又顯然更加方便,我們就可以通過指標的方法運算元組。

陣列清零:

#include

intmain()

;int

*p = arr;

int sz =

sizeof

(arr)

/sizeof

(arr[0]

);int i =0;

for(i =

0; i

)return0;

}

arr 和 &arr 分別是啥?

我們知道arr是陣列名,陣列名表示陣列首元素的位址。

那&arr陣列名到底是啥?

我們看一段**:

#include

intmain()

;printf

("%p\n"

, arr)

;printf

("%p\n"

,&arr)

;return0;

}

執行結果如下:

可見陣列名和&陣列名列印的位址是一樣的。

難道兩個是一樣的嗎?

我們再看一段**:

根據上面的**我們發現,其實&arr和arr,雖然值是一樣的,但是意義應該不一樣的。

實際上: &arr 表示的是陣列的位址,而不是陣列首元素的位址。(細細體會一下)

陣列的位址+1,跳過整個陣列的大小,所以 &arr+1 相對於 &arr 的差值是40.

我們只需記得陣列在兩種情況下是特殊的,其餘情況陣列名指的都是首元素的位址。

情況一:sizeof(陣列名)指的是整個陣列。

情況二:&陣列名 指的是整個陣列。

指標陣列是指標還是陣列?

答案是:是陣列。是存放指標的陣列。

陣列是乙個型別,指標是乙個型別,上面我們可以發現,指標裡可以指向陣列,同樣,陣列也能儲存指標,這就是陣列指標。

定義

int

* arr[5]

;

從操作符方面來說 優先順序高於 * 所以可以保證陣列內每個位置都可以被定義為指標型別。

所以上面的定義是乙個整型指標陣列。

陣列指標是指標?還是陣列?

答案是:指標。

我們已經熟悉: 整形指標: int * pint; 能夠指向整形資料的指標。 浮點型指標: float * pf; 能夠指向浮點型數

據的指標。

那陣列指標應該是:能夠指向陣列的指標。

陣列指標的定義:

int

(*p)[10

];//解釋:p先和*結合,說明p是乙個指標變數,然後指著指向的是乙個大小為10個整型的陣列。所以p是乙個指標,指向乙個陣列,叫陣列指標。

//這裡要注意:的優先順序要高於*號的,所以必須加上()來保證p先和*結合。

那陣列指標是怎麼使用的呢?

既然陣列指標指向的是陣列,那陣列指標中存放的應該是陣列的位址。

但是我們並不像定義那樣使用乙個陣列指標。

#include

void

print_arr1

(int arr[3]

[5],

int row,

int col)

printf

("\n");

}}void

print_arr2

(int

(*arr)[5

],int row,

int col)

printf

("\n");

}}intmain()

;print_arr1

(arr,3,

5);//陣列名arr,表示首元素的位址

//但是二維陣列的首元素是二維陣列的第一行

//所以這裡傳遞的arr,其實相當於第一行的位址,是一維陣列的位址

//可以陣列指標來接收

print_arr2

(arr,3,

5);return0;

}

一般陣列指標用作函式傳參,在這裡我們可以把陣列當作引數傳給函式,在此用的就是傳址傳參

print_arr1和print_arr2兩個函式在這裡的形參雖然表示方式不同,但在意義上和內容上完全一致。

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...

指標陣列和陣列指標

該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...