首先我們看一段**,在程式設計中是否遇到過這樣的情況?
我們可以看到使用陣列名和使用指標的效果一樣。
那是否就能說明陣列和指標有某種關係,甚至是一樣的呢?
實際上指標和陣列毫無關係。
首先,陣列是陣列變數型別,指標式指標變數型別,從變數型別角度來說就不同。
陣列名是沒有單獨開闢空間的,而指標開闢了自己的空間,這就是他們最大的不同。
陣列傳參時,會發生降維(降維成指向其內部元素型別的指標),既然能夠降維成指標,則說明兩者不同。
他們在使用上不過是有一定相似性罷了。
有了上面的經驗,我們也就可以知道了:
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本身...