如何使用指针表示法从数组元素中减去?

时间:2019-06-02 22:40:35

标签: c++ arrays pointers

我有一个提示,要求我声明和初始化一个由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指向数组的最后一个元素。

1 个答案:

答案 0 :(得分:0)

因此,数组表示法实际上是指针算法的语法糖。在您的代码中:

p[1] = 30.0;

也可以写为

*(p + 1) = 30.0;

类似地,如果您想“使用指针符号通过指针从最后一个数组元素中减去10.0”

您可以这样做:

double *p = arr
*(p + 3) -= 10.0

说明:

声明数组时,声明的是一系列存储在连续内存中的值(这意味着彼此相邻的内存块)。您能够访问该数组中不同元素的原因是您知道

  • 数组从哪里开始
  • 您想走多远

实际上,数组符号arr[2](其中arrdouble的数组)的意思是“转到数组arr的内存地址,沿{{ 1}},然后给我们存储的值。有趣的是,这正是2 * sizeof(double)的意思,只有它被分解了-方括号内的位表示“沿2移动”,而星号表示(“解引用运算符“)意味着给我们带来价值。