指針只能以不連續的步驟移動。計算地址:指針+非負數
int *p;
p = malloc(sizeof(int)*8);
因此,正式*(p + 2)計算爲*(p + 2 * sizeof(int))。
但是,如果我實際編碼上述兩個,我會得到不同的結果,這似乎是可以理解的。
*p = 123;
*(p+2) = 456;
printf("%d\n",*(p+2*(sizeof(int)))); \\0
printf("%d\n",*(p+2)); \\456
問題是,這個計算是否隱含,由編譯器在編譯時完成?
*是否爲隱式計算,由編譯器在編譯時完成?*:是。究竟。 – haccks
在數字系統中**每個**計算都是以不連續的步驟完成的。和「因此,形式上(p + 2)'計算爲'(p + 2 * sizeof(int))'」。是錯的。 '(p + 2)'計算爲'(int *)((char *)p + 2 * sizeof(int))''。失格是一個不同的操作。你可能想讀一本好的C書。 – Olaf
該計算是隱式的,由編譯器完成。與以0,1,2,3(不用乘以sizeof(int))相同的方式索引int []數組的方式相同,這同樣適用於指針運算。 –