瀏覽單個文章
yaingc
Regular Member
 

加入日期: Mar 2006
文章: 73
我之前的回應有問題,在此更正一下

a[5][5] 和 &a[0][0][0][0] 本身都是記憶體位置沒有錯

雖然a[5][5]是指向a[0][0][0][0]本身的位置,但它本身
也是「6位元組資料型態指標」。

所以a[5][5]-a[0][0]相減的結果為二位址距離「多少個6位元組資料型態記憶體位置」


再來,
&a[5][5][0][0]和&a[0][0][0][0]本身也都是記憶體位置,
但都是「byte型態」記憶體指標。

&a[5][5][0][0]和&a[0][0][0][0]二個相減的結果就是
二個位置「多少個byte記憶體位置」


所以:

printf("a5][5]=%d\na[0][0]=%d\n%d\n",a[5][5],a[0][0],a[5][5]-a[0][0]);
printf("a[5][5][0][0]=%d\na[0][0][0][0]=%d\n%d",&a[5][5][0][0],&a[0][0][0][0],&a[5][5][0][0]-&a[0][0][0][0]);

這二行的結果不會一樣。
指標之間的相減,要看指標本身指向的記憶體內容型態而定。

可以參考一下這網頁
http://ivan7645.github.io/2017/01/11/ptr_multi_arr/
舊 2018-05-31, 06:01 PM #4
回應時引用此文章
yaingc離線中