Что такое указатели в языке программирования C++?



Автор Єирсов Михаил задал вопрос в разделе Другие языки и технологии

Указатели С++ и получил лучший ответ

Ответ от Борис Большем[эксперт]
Указатель в С++ — это переменная, которая хранит адрес другой переменной в памяти. Поскольку сам указатель является переменной, у него тоже есть адрес, что позволяет создавать указатели на указатели. Обычный указатель объявляется с одной звездочкой и может ссылаться на одну структуру или на массив структур, где первый элемент будет под индексом ноль. Двойной указатель, обозначаемый двумя звездочками, используется, когда нужно передать в функцию адрес самого указателя, чтобы изменить его внутри функции, или при работе с двумерными массивами и массивами указателей. В примере со структурой 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

Ответ от Ўрий-17[гуру]
** Указатель на массив указателей
Может и больше быть
Если хотите практически почти всё знать об указателях, есть книга Джеффа Элджера С++ Библиотека программиста, окунётесь в Мир указателей и узнаете много нового!

Ответ от Xraux[гуру]
** - указатель на указатель. Три - указатель на указатель на указатель, и так далее. Указатель - это тоже переменная, и естественно, что можно получить ее адрес. Конкретно в этом примере использование ** - совершенно лишнее (если это, конечно, не массив) . Вызов этой функции может быть таким:
Node* n = new Node(); // указатель на структуру
// ...
add(&n, 1);

Ответ от Николай Веселуха[гуру]
Двойной указатель, используется при передачи в функцию (метод) двумерного массива, может быть и многомерный **** для четырёхмерного массива.
Ну а уж каким боком, вы, там у себя в коде, хотите это пристроить - дело ваше.
В данном случае вы пытаетесь передать в функцию двумерный массив типа Node, хотя указатели в структуре предполагают использование двунаправленного связанного списка.

Ответ от ВикиВопрос[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Указатели С++

Чем указатели лучше переменных?
Указатели — это переменные, хранящие не сами данные, а адреса ячеек памяти. Сравнивать их с
подробнее...

3D max Пропали указатели осей при редактировании подобъектов
Если в 3D Max при редактировании подобъектов пропали указатели осей, сначала убедитесь, что выбран
подробнее...

Что такое словарная статья? Подскажите, мне надо написать словарную статью...
Словарная статья представляет собой основную структурную единицу любого словаря, посвященную
подробнее...

Кто-нибудь уже проходил Комиссию по признанию носителем Русского языка? Поделитесь!
Прохождение комиссии по признанию носителем русского языка включает аудирование с применением
подробнее...

Как в 3D MAX закрыть модификатор Unwrap UVW?
Чтобы корректно завершить работу с модификатором Unwrap UVW в 3ds Max, сначала полностью закончите
подробнее...
Указатель тип данных на Википедии
Посмотрите статью на википедии про Указатель тип данных
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*