Автор Єирсов Михаил задал вопрос в разделе Другие языки и технологии
Указатели С++ и получил лучший ответ
Ответ от Борис Большем[эксперт]
Указатель в С++ — это переменная, которая хранит адрес другой переменной в памяти. Поскольку сам указатель является переменной, у него тоже есть адрес, что позволяет создавать указатели на указатели. Обычный указатель объявляется с одной звездочкой и может ссылаться на одну структуру или на массив структур, где первый элемент будет под индексом ноль. Двойной указатель, обозначаемый двумя звездочками, используется, когда нужно передать в функцию адрес самого указателя, чтобы изменить его внутри функции, или при работе с двумерными массивами и массивами указателей. В примере со структурой Node двойной указатель в функции позволяет изменить исходный указатель из главной программы, а не его локальную копию. Для глубокого изучения темы часто рекомендуют книгу Джеффа Элджера С++ Библиотека программиста, где подробно разбирается работа с памятью.
Требует ссылку на указатель вроде
так компилится
struct Node{
int d;
Node *next;
Node *prev;
};
void add(Node **pend, int d){}
int main()
{
Node *p;
p = new Node();
add(&p,6);
}
вот что генерируется а asm код
// для наглядности ...если маил не испортит листинг:
.file"2.cpp"
.intel_syntax noprefix
.text
.globl _Z3addPP4Nodei
.type_Z3addPP4Nodei, @function
_Z3addPP4Nodei:
.LFB0:
.cfi_startproc
pushebp
.cfi_def_cfa_offset 8
movebp, esp
.cfi_offset 5, -8
.cfi_def_cfa_register 5
popebp
.cfi_restore 5
.cfi_def_cfa 5, 4
ret
.cfi_endproc
.LFE0:
.size_Z3addPP4Nodei, .-_Z3addPP4Nodei
.globl main
.typemain, @function
main:
.LFB1:
.cfi_startproc
pushebp
.cfi_def_cfa_offset 8
movebp, esp
.cfi_offset 5, -8
.cfi_def_cfa_register 5
andesp, -16
subesp, 32
movDWORD PTR [esp], 12
call_Znwj
movedx, eax
moveax, edx
movDWORD PTR [eax], 0
movDWORD PTR [eax+4], 0
movDWORD PTR [eax+8], 0
moveax, edx
movDWORD PTR [esp+28], eax
movDWORD PTR [esp+4], 6
leaeax, [esp+28]
movDWORD PTR [esp], eax
call_Z3addPP4Nodei
moveax, 0
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE1:
.sizemain, .-main
.ident"GCC: (Gentoo 4.5.3-r1 p1.0, pie-0.4.5) 4.5.3"
.section.note.GNU-stack,"",@progbits
** Указатель на массив указателей
Может и больше быть
Если хотите практически почти всё знать об указателях, есть книга Джеффа Элджера С++ Библиотека программиста, окунётесь в Мир указателей и узнаете много нового!
** - указатель на указатель. Три - указатель на указатель на указатель, и так далее. Указатель - это тоже переменная, и естественно, что можно получить ее адрес. Конкретно в этом примере использование ** - совершенно лишнее (если это, конечно, не массив) . Вызов этой функции может быть таким:
Node* n = new Node(); // указатель на структуру
// ...
add(&n, 1);
Двойной указатель, используется при передачи в функцию (метод) двумерного массива, может быть и многомерный **** для четырёхмерного массива.
Ну а уж каким боком, вы, там у себя в коде, хотите это пристроить - дело ваше.
В данном случае вы пытаетесь передать в функцию двумерный массив типа Node, хотя указатели в структуре предполагают использование двунаправленного связанного списка.
в языке python есть указатели ?
Python – язык динамической типизации. Мы не объявляем переменные как в других языках, а присваиваем
подробнее...
да зачем нужны эти указатели ?? C++. Зачем нужны указатели? почему не обойтись без простой переменной??
Указатель содержит адрес первого байта объекта в памяти, тип указателя, говорит о том сколько
подробнее...
Вдоль дороги на Подмосковных трассах стоят указатели километров, откуда их считают, от МКАД или от центра Москвы?
Указатели километров стоят не только на подмосковных трассах, а по всей стране. Счет идет от
подробнее...
Чем указатели лучше переменных?
Указатели — это переменные, хранящие не сами данные, а адреса ячеек памяти. Сравнивать их с
подробнее...
C++ указатели на структуры
strcpy()
Надо понимать, что name - это адрес
ЗЫЖ Структуры в данном случае - не
подробнее...
Сигнализация KGB VS 5000. При снятии и поставке на охрану не срабатывают указатели поворота.
да тъ тут не причем, в самой сигналке нет диодов, поетому ставяться дополнительнъе на поворотники,
подробнее...
Указатели С++
Указатель в С++ — это переменная, которая хранит адрес другой переменной в памяти. Поскольку сам
подробнее...
Для чего на некоторых авто стоят указатели температуры масла?
По температуре масла опытный водитель, не обязательно механик, может определить как хорошо или
подробнее...
C++. Указатели. Связный список. Как добавить элемент в конец списка? Вопрос для разбирающихся
Ваш next, последнего элемента в списке указывает на NULL, а новый элемент списка вы создаёте по
подробнее...
3D max Пропали указатели осей при редактировании подобъектов
Если в 3D Max при редактировании подобъектов пропали указатели осей, сначала убедитесь, что выбран
подробнее...
не работает аварийная сигнализация и указатели поворота с зажиганием, без зажигания аварийная сигнализация работает
может просто масса плохая
сер ков
Гуру
(2978)
проверь еще сами
подробнее...
С++ / интеллектуалььные указатели / std::unique_ptr
unique_ptr<double[]> apa_ptr(new double(6));
Создаст массив только с одним
подробнее...
Какие слова указатели в английском времени Present Perfect?
since, yet, just, already, never, ever, recently, this is the first time (second time),
подробнее...