指標陣列與陣列指標簡單區分

2021-10-06 11:22:38 字數 2080 閱讀 2192

**

首先來介紹指標:在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電 腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將 位址形象化的稱為「指標」。意思是通過它能找到以它為位址的記憶體單元。

#include

intmain()

int a;

int b[10]

;

將a稱為標量,因為代表單一的值;

將b稱為陣列,代表一些值的集合。下標和陣列名一起使用,代表特定的值。如:b[0]代表第乙個元素,b[4]代表第五個元素。那麼又有問題,b[4]的型別是整形,那麼b的型別是什麼。我們可能認為它代表整個陣列,但是卻不是。在所有有陣列名的表示式中,陣列名是乙個指標常量,也就是代表陣列第乙個元素的位址。根據型別不同,如果是int型,那就是指向int的常量指標,如果是char型,那就是指向char的常量指標。

陣列和指標並不相同,陣列具有確定數量的元素,而指標只是個標量值。只有在使用陣列名時,才會為它產生乙個指標常量。

當兩種情況,陣列名不用指標常量表示--------當陣列名作為sizeof操作符或者單目操作符&的運算元:sizeof返回的是整個陣列的長度,取位址則產生的是指向陣列的指標。

請問

int a[5]

;int

*b;

可以進行a和b的互換嗎。它們都具有指標值,都可以進行間接訪問和下標引用操作。但是,他們之間還是存在很大區別。

宣告陣列,編譯器會根據給定的元素數量為陣列分配空間,然後再建立陣列名,它的值是乙個常量,指向這個陣列第乙個元素位置。宣告指標,編譯器只會為指標申請空間,而不會為任何整型值申請空間,而且指標變數並未被初始化為指向任意現有記憶體空間,甚至並未被初始化。

在上述中,表示式a,完全合法,但是b卻不合法,因為指向不確定空間,可能導致程式停止。

陣列指標(指向陣列的指標)

在《c和指標》中有這樣乙個例子:

int     vector[10]

,*vp=vector;

int matrix[3]

[10],

*mp=matrix;

在上面的宣告中,為乙個整型陣列分配記憶體,並將vp宣告為乙個指向整形的指標,並將它初始化指向vector第乙個元素。

下面的宣告中,正確的建立了matrix陣列,並把mp宣告為乙個指向整形的指標,但是他的初始化卻不正確,因為matrix並不是乙個指向整形的指標,而是指向整型陣列的指標。

那麼如何正確的宣告乙個指向陣列的指標。

int (*p)[10];

我們假定它是乙個表示式對它求值。下標引用優先順序高於間接訪問,可是因為括號的存在,所以首先,p是乙個指標,接下來是下標訪問,p指向的是某種型別的陣列。但是在上面的表示式中,我們可以看到陣列的每個元素都是整數。

得到結論:p是乙個指向整型陣列的指標。

對他進行初始化

int   (*p)[10]

=matrix;

p指向metrix的一行。

有兩種方式使得指標指向metrix第乙個整形元素

int

*p=&matrix[0]

[0];

int*p=matrix[0]

;//如果進行指標運算,避免下面宣告

int(

*p)[

]=matrix;

//當進行指標運算的時候,根據空陣列長度進行調整(與0相乘)

指標陣列宣告指標陣列

int

*p[10

];

下標的優先順序高於間接訪問,首先應該是個陣列,陣列中包含著十個元素,在表示式中,沒有其他操作符,所以元素型別是指向整形的指標。

簡單區分指標陣列與陣列指標

首先我們了解一下它們的定義 指標陣列 首先它是乙個陣列,其次就是陣列的元素都是指標。陣列指標 首先它是乙個指標,其次它指向乙個陣列,在32位系統下佔4個位元組。知道了定義你也那不一定會判斷,現在來舉個栗子 1 int p1 4 2 int p2 4 要根據定義區分它們兩個其實涉及了乙個符號優先順序問...

區分陣列指標與指標陣列

1.概念的區分 陣列指標 陣列的指標,首先說它是乙個指標,乙個指向陣列的指標。指標陣列 指標的陣列,它是乙個陣列,陣列中存放的內容為指標。2.優先順序的不同 優先順序為 比如int p n 因為 的優先順序最高,p先於結合,所以p是乙個指標,後面是陣列,於是這個就是陣列指標。在如int p n 優先...

函式指標,指標函式,陣列指標,指標陣列 區分

what why how 這些怎麼區分 函式指標 重點在指標,表示它是乙個指標,它指向的是乙個函式。eg int fun 指標函式 重點在函式,表示它是乙個函式,它的返回值是指標。eg int fun 陣列指標 重點在指標,表示它是乙個指標,它指向的是乙個陣列。int fun 8 指標陣列 重點在陣...