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 個元素的值。