Как я могу вычесть из элементов в массиве с указателем обозначения? - PullRequest
2 голосов
/ 03 июня 2019

У меня есть приглашение с просьбой объявить и инициализировать массив из 4 двойных чисел и создать указатель на массив. Затем я должен добавить 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 голосов
/ 03 июня 2019

Таким образом, запись массива является действительно синтаксическим сахаром над арифметикой указателя. В вашем коде:

p[1] = 30.0;

Можно также записать как

*(p + 1) = 30.0;

Точно так же, если вы хотите «вычесть 10.0 из последнего элемента массива через указатель, используя обозначение указателя»

Вы бы сделали это:

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

Пояснение:

Когда вы объявляете массив, вы объявляете серию значений, хранящихся в непрерывной памяти (это означает блоки памяти рядом друг с другом). Причина, по которой вы можете получить доступ к различным элементам этого массива, заключается в том, что вы знаете

  • Где начинается массив
  • Как далеко вы хотите продвинуться

На самом деле, обозначение массива arr[2] (где arr - массив double s) означает «Перейти к адресу памяти массива arr, двигаться по 2 * sizeof(double), затем дать нам сохраненное значение достаточно забавно, это именно то, что означает *(p + 2), только оно разбито - бит внутри скобок означает «двигаться вдоль 2», а звезда («оператор разыменования») означает, что мы получаем значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...