Указатель также имеет какое-либо распределение адресов или выделение памяти?

Не без плагина. Я не знаю, почему эта особенность не является основной частью затмения.

https://github.com/benjchristensen/SimpleDirectoryContainer_EclipsePlugin

7
задан Jean-François Fabre 8 July 2018 в 19:43
поделиться

5 ответов

Да. Ниже у меня есть int и указатель на int и код для вывода каждого адреса памяти.

int a;
printf("address of a: %x", &a);

int* pA = &a;
printf("address of pA: %x", &pA);

Указатели в 32-битных системах занимают 4 байта.

10
ответ дан 6 December 2019 в 04:55
поделиться

Затем в C:

char *p = "Here I am";

p сохраняется адрес, по которому хранится «H». p - переменная. Вы можете взять на него указатель:

char **pp = &p;

pp теперь хранит адрес p . Если вы хотите получить адрес pp , это будет & pp и т. Д.

3
ответ дан 6 December 2019 в 04:55
поделиться

Да, объявленный указатель имеет собственное место в памяти.

alt text

В приведенном выше примере у вас есть переменная 'b', в которой хранится значение «17».

int b = 17;    /* the value of 'b' is stored at memory location 1462 */

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

int *a;
a = &b;       /* the pointer 'a' is stored at memory location 874 */

Задача компилятора - знать, где «получить указатель». Когда ваш исходный код ссылается на указатель 'a', компилятор переводит его в -> «любое значение адреса, хранящееся в ячейке памяти 874».

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

27
ответ дан 6 December 2019 в 04:55
поделиться

Посмотрите этот пост SO для лучшего понимания указателей. Каковы препятствия на пути к пониманию указателей и что можно сделать для их преодоления?

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

4
ответ дан 6 December 2019 в 04:55
поделиться

Компилятор занимается преобразованием переменных в нашем коде в ячейки памяти, используемые в машинных инструкциях. Местоположение переменной-указателя зависит от того, где она объявлена ​​в коде, но программисты обычно не должны иметь дело с этим напрямую.

Переменная, объявленная внутри функции, находится в стеке или в регистре (если только она не объявлена ​​статической).

Переменная, объявленная на верхнем уровне, находится в разделе памяти в верхней части программы.

Переменная, объявленная как часть динамически выделяемой структуры или массива, находится в куче.

] Оператор «&» возвращает место в памяти переменной, но, в отличие от оператора «*», его нельзя повторить.

Например, * * * i получает значение по адресу * * i, что - это значение по адресу * i, то есть значение, хранящееся в i, которое компилятор выясняет, как найти.

Но && i не компилируется. & я - число, это место в памяти, которое компилятор использует для переменной i. Этот номер нигде не хранится, поэтому && i не имеет смысла.

(Обратите внимание, что если & i используется в исходном коде, то компилятор не может сохранить i в регистре.)

1
ответ дан 6 December 2019 в 04:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: