Присвоение адреса массива переменной и удаление - PullRequest
0 голосов
/ 04 ноября 2018

Мое назначение требует, чтобы я сделал это: «Выделите массив из семи целых чисел; инициализируйте его как 1,2,4,8 и т. Д.; И назначьте его адрес переменной p2»

Это был мой код:

int* p2 = new int[7] {1,2,4,8,16,32,64};
    cout << "Drill 3 & 4 (allocating 7 element array): " << endl;
    for (int i = 0; i < 7; ++i) {
        cout << p2[i];
    }

но меня беспокоит, что я неправильно понимаю инструкции. Из-за этого я попробовал этот код, который нашел в Интернете:

int* sev = new int[7];
for (int i = 0; i<7; ++i)
    sev[i] = i+1;
int* p2 = sev;
cout << "p2= " << p2 << ", *p2=" << *p2 << endl;
cout << "sev= " << sev << ", *sev=" << *sev << endl;

Но он выводит адрес, а затем 1. И когда я добавляю цикл for, чтобы сделать это семь раз для всех элементов, это просто 1111111.

Мой код выше: присвоение адреса указателю или что-то другое?

Позже я должен сделать его равным p1, который является указателем (* int p1 = & x, x = 7 <- не код, для справки). И мне нужно освободить p1 и p2 (и p3, но это не актуально). Это позволяет мне освободить p2, но не p1. Итак, я думаю, что, может быть, я не понимаю вопроса или неправильно подхожу к нему. </p>

1 Ответ

0 голосов
/ 04 ноября 2018

И переменная sev, и переменная p2 указывают на первый элемент данных, которые вы выделили. Это действительно все, что у тебя есть.

Поэтому, когда вы разыменовываете указатели (например, *sev), вы разыменовываете указатель только на этот элемент и получаете только это значение.

Более "графический" взгляд на ваш "массив" может выглядеть так:

+--------+--------+--------+--------+--------+--------+--------+
| sev[0] | sev[1] | sev[2] | sev[3] | sev[4] | sev[5] | sev[6] |
+--------+--------+--------+--------+--------+--------+--------+
^
|
sev / p2

Стрелка указывает только на первый элемент.

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