這道題應該注意 指針類型加減 時步長的問題。
A 大小爲 4
B 大小爲 8
那麼:
void seta(A* data, int idx) {
data[idx].a = 2;
}
因爲傳入的實參爲B類型,大小爲8,而形參爲A類型,大小爲4
data[idx] 取 data + idx 處的元素,這時指針 data加1 的長度不是一個B長度,而是一個A長度,或者說是1/2個B長度。這時該函數中 data[0~3] 指向的是原 data[0].a,data[0].b,data[1].a,data[1].b,
因爲隱式類型轉換的緣故,
data[0].a,
data[0].b,data[1].a,data[1].b 處的值所有因爲 data[idx].a = 2; 操做變爲 2。
這道題若是改成void seta(B* data, int idx),那麼形參中data指針加1步長爲8,結果就是21212121。可是因爲步長爲4,因此結果就是 22221111。