我有一个提示,要求我声明和初始化一个由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指向数组的最后一个元素。
答案 0 :(得分:0)
因此,数组表示法实际上是指针算法的语法糖。在您的代码中:
p[1] = 30.0;
也可以写为
*(p + 1) = 30.0;
类似地,如果您想“使用指针符号通过指针从最后一个数组元素中减去10.0”
您可以这样做:
double *p = arr
*(p + 3) -= 10.0
说明:
声明数组时,声明的是一系列存储在连续内存中的值(这意味着彼此相邻的内存块)。您能够访问该数组中不同元素的原因是您知道
实际上,数组符号arr[2]
(其中arr
是double
的数组)的意思是“转到数组arr
的内存地址,沿{{ 1}},然后给我们存储的值。有趣的是,这正是2 * sizeof(double)
的意思,只有它被分解了-方括号内的位表示“沿2移动”,而星号表示(“解引用运算符“)意味着给我们带来价值。