對數組名與指針的認識

char *p 這裏的*與char一樣 定義了變量p爲字符型指針。

printf(%s“,*p); 這裏的* 稱之爲間接運算符 不過我個人更喜歡稱呼爲 取值運算符

*p:找到p變量裏保存的地址對應的內存空間。

p++:對p對應的內存空間的值加1。

(*p)++:對p指向的內存空間的值加1。

*(ptr + i)=ptr[i]; 運算符[] = *()  不過值得注意的是 等式兩邊雖然成立 但是左邊ptr對應的內存空間已經改變 而 後者並未改變

我們知道p變量是用來保存地址的 那麼p本身也有地址 如果需要變量來保存的話 相應的就有了二維指針 **p 用來保存p的地址。

對於數組 我們都知道數組名保存的是數組首元素的地址 實際上還應該補充一點 對於一維數組名而言 它是一個指針常量 保存了數組首元素的地址。

&a:數組的地址(對一維數組名取地址) *(&a) = a :對一維數組地址取值等於數組首元素的地址。

二維數組名也是一個指針常量 保存了第一個一維數組地址

for循環中 i = 0 ,j = 0;a是一個二維數組名     那麼*(*(a + i)+ j)是什麼?

a + i:第i + 1個一維數組的地址 

*(a + i) :第i + 1的一維數組首元素的地址

*(a + i)+ j:第 i + 1 個一維數組的第 j + 1 個元素的地址

那麼 就很簡單了 *(*(a + i) + j) 就是第 i + 1 個一維數組的第 j + 1 個元素的值。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章