[英]How can I subtract from elements in an array with pointer notation?
我有一個提示要求我聲明並初始化4個double的數組,並創建一個指向該數組的指針。 然后,我應該通過數組表示法通過指針將30.0添加到數組的第二個物理元素。 之后,我應該使用指針表示法從指針的最后一個數組元素中減去10.0。 然后,我應該將指針重新分配給數組的最后一個元素。
我試圖弄清楚如何用指針表示法減去,但沒有骰子。 我沒有遵循需要做的事情。
到目前為止,這是我的代碼:
int main () {
double arr[4] = {10.0, 15.0, 20.0, 25.0};
double *p = &arr;
p[1] = 30.0; //array notation
//code should go here for the subtracting ten part
//code should go here assigning pointer to last element of array.
//My idea of how this would look:
p = (p + 3); // or 15.0
//or:
p = arr[3];
}
我嘗試做類似(p + 3)-= 10.0的操作,但是我感覺不對。
我認為結果應該是:我的arr元素為{10.0,30.0,20.0,15.0}並且p指向數組的最后一個元素。
因此,數組表示法實際上是指針算法的語法糖。 在您的代碼中:
p[1] = 30.0;
也可以寫成
*(p + 1) = 30.0;
同樣,如果要“使用指針表示法通過指針從最后一個數組元素中減去10.0”
您可以這樣做:
double *p = arr
*(p + 3) -= 10.0
說明:
聲明數組時,是聲明存儲在連續內存中的一系列值(這意味着內存塊彼此相鄰)。 您能夠訪問該數組中不同元素的原因是您知道
所以說真的,數組符號arr[2]
(其中arr
是double
的數組)表示“轉到數組arr
的內存地址,沿2 * sizeof(double)
,然后將存儲的值提供給我們。Funnilly足夠了,這就是*(p + 2)
含義,只是它被細分了-括號內的位表示“沿2移動”,而星號(“取消引用運算符”)則表示給我們值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.