//指標與陣列 指標的自加和移位 的問題//初始他如下:int a[10];int *p;p = &a[0]; //因為a是首地址,所以可以寫成p = a;1. p+n; p+n 和 a+n表示陣列元素a[n]的地址,即是&a[n]; p+1表示同一個陣列下一個元素的地址;地址的值需要根據陣列元素的型別來計算,公式為“地址 = p + n*d” n是接下來的第幾個指向,d是指元素型別所佔的位元組數。(只有指標變數可以實現本身的改變,所以p++合法,而a++不合法,因為a是陣列名,是首地址,是常量)2. *(p + n) 和 *(a + n),因為 " * "是取值符號,所以根據1易知 表示 a[n]的值。因為 " ++ "和 " * "是同一優先順序,結合方向自右至左。所以 (1) *p++ 等價於 *(p++)(2) (*p)++ 表示p所指向的元素值加1,先取值再加1(3) ++*p 則就是 ++(*p) 所指向的元素 先加1後再使用,與(2)類似,可以做比較
//指標與陣列 指標的自加和移位 的問題//初始他如下:int a[10];int *p;p = &a[0]; //因為a是首地址,所以可以寫成p = a;1. p+n; p+n 和 a+n表示陣列元素a[n]的地址,即是&a[n]; p+1表示同一個陣列下一個元素的地址;地址的值需要根據陣列元素的型別來計算,公式為“地址 = p + n*d” n是接下來的第幾個指向,d是指元素型別所佔的位元組數。(只有指標變數可以實現本身的改變,所以p++合法,而a++不合法,因為a是陣列名,是首地址,是常量)2. *(p + n) 和 *(a + n),因為 " * "是取值符號,所以根據1易知 表示 a[n]的值。因為 " ++ "和 " * "是同一優先順序,結合方向自右至左。所以 (1) *p++ 等價於 *(p++)(2) (*p)++ 表示p所指向的元素值加1,先取值再加1(3) ++*p 則就是 ++(*p) 所指向的元素 先加1後再使用,與(2)類似,可以做比較