Не без плагина. Я не знаю, почему эта особенность не является основной частью затмения.
https://github.com/benjchristensen/SimpleDirectoryContainer_EclipsePlugin
Да. Ниже у меня есть int и указатель на int и код для вывода каждого адреса памяти.
int a;
printf("address of a: %x", &a);
int* pA = &a;
printf("address of pA: %x", &pA);
Указатели в 32-битных системах занимают 4 байта.
Затем в C:
char *p = "Here I am";
p
сохраняется адрес, по которому хранится «H». p
- переменная. Вы можете взять на него указатель:
char **pp = &p;
pp
теперь хранит адрес p
. Если вы хотите получить адрес pp
, это будет & pp
и т. Д.
Да, объявленный указатель имеет собственное место в памяти.
В приведенном выше примере у вас есть переменная '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 используют по четыре байта.
Посмотрите этот пост SO для лучшего понимания указателей. Каковы препятствия на пути к пониманию указателей и что можно сделать для их преодоления?
Что касается вашего вопроса, если я понимаю, что вы хотите, то, по сути, когда вы объявляете указатель, вы указываете адрес или числовой индекс, который присваивается каждой единице памяти в системе (обычно байт или слово). Затем система обеспечивает операцию по извлечению значения, хранящегося в памяти по этому адресу.
Компилятор занимается преобразованием переменных в нашем коде в ячейки памяти, используемые в машинных инструкциях. Местоположение переменной-указателя зависит от того, где она объявлена в коде, но программисты обычно не должны иметь дело с этим напрямую.
Переменная, объявленная внутри функции, находится в стеке или в регистре (если только она не объявлена статической).
Переменная, объявленная на верхнем уровне, находится в разделе памяти в верхней части программы.
Переменная, объявленная как часть динамически выделяемой структуры или массива, находится в куче.
] Оператор «&» возвращает место в памяти переменной, но, в отличие от оператора «*», его нельзя повторить.
Например, * * * i получает значение по адресу * * i, что - это значение по адресу * i, то есть значение, хранящееся в i, которое компилятор выясняет, как найти.
Но && i не компилируется. & я - число, это место в памяти, которое компилятор использует для переменной i. Этот номер нигде не хранится, поэтому && i не имеет смысла.
(Обратите внимание, что если & i используется в исходном коде, то компилятор не может сохранить i в регистре.)