Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
1

Указатели на указатели: для чего они могут понадобятся?

18.08.2018, 03:47. Показов 3632. Ответов 47
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Изучаю C++, дошёл до указателей на указатели.
Там пишут что эта тема не обязательна.
Для чего они могут понадобятся?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2018, 03:47
Ответы с готовыми решениями:

Для чего нужны указатели?
Кто может объяснить для чего нужны указатели и смысл их? в интернете одна муть и еще для чего нужно...

Для чего нужны указатели на функции?
для чего нужны эти указатели на функции... не проще ли вызвать саму функцию, чем заводить под нее...

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно....

Ссылки и указатели, для чего нужны те и другие?
Что такое ссылки? Что такое указатели? ДЛЯ чего служат те и другие?

47
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
18.08.2018, 04:58 2
Указатель играет двойную роль в языках.
Массив на стеке неявно кастуется к указателю на первый элемент массива.
Классически память как в C, так и в C++ выделяется, возвращая указатель на выделенный блок (в лучшем случае).
Указатель на указатель чаще считают интерфейсом для управление матрицей, ассоциируя имя такого указателя с адресом начала массива указателей, которые, в свою очередь, хранят адреса уже "привычных для работы" массивов.

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

Третье измерение можно описать как массив матриц - слоёв, а интерфейс - это (лень писать словами):
C++
1
bool RealWorld[Z_dim][Y_dim][X_dim];
Есть забавная взаимосвязь между int* и int[].
Допиши больше звёздочек и скобочек - станет интереснее.

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

Массивы большей размерности? Пожалуйста!
При моделировании реального мира нужно учитывать не только позиции объектов.
Как насчёт их скоростей и ускорений? Просто добавляешь ещё два измерения.

Нужно больше информации на одну точку пространства? Просто добавь больше измерений!
Секрет
Стека не хватит. Привет, куча.
3
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.08.2018, 05:29 3
Цитата Сообщение от kcalbCube Посмотреть сообщение
Изучаю C++, дошёл до указателей на указатели.
Там пишут что эта тема не обязательна.
Для чего они могут понадобятся?
Итераторы для массива указателей. Да, можно в принципе и индексы использовать, но STL алгоритмы хотят именно итераторы.
C++
1
2
3
    const char*array[]={"Раз","два","три","четыре","пять","вышел","зайчик","погулять"};
    for(const char**str=array;str<array+8;++str)
        std::cout<<*str<<std::endl;
0
Модератор
Эксперт С++
13688 / 10894 / 6469
Регистрация: 18.12.2011
Сообщений: 29,076
18.08.2018, 08:29 4
Лучший ответ Сообщение было отмечено kcalbCube как решение

Решение

Мне кажется от предыдущих сообщений kcalbCube совсем запутался.
Объявим переменную
C++
1
int** pp;
В ней будем хранить адреса массива, в котором будут содержаться адреса строк матрицы.
C++
1
pp=new int*[n];
n - количество таких строк
Теперь выделим память для каждой строки
C++
1
2
for(int i=0;i<n;i++)
   pp[i]=new int[m];
m - длина строк (количество столбцов).
У нас сформировалась матрица, к которой можно обращаться как к двумерному массиву:
C++
1
2
3
4
5
6
7
8
9
10
11
12
for(int i=0;i<n;i++)
   for(int j=0;j<m;j++)
      cin>>pp[i][j];
for(int i=0;i<n;i++)
   for(int j=0;j<m;j++)
      pp[i][j]*=2;
for(int i=0;i<n;i++)
{
   for(int j=0;j<m;j++)
      cout<<pp[i][j]<<' ';
   cout<<endl;
}
Ну и, наконец, надо не забыть удалить все, что насоздавали
C++
1
2
3
for(int i=0;i<n;i++)
   delete[] pp[i];// удалили строки
delete[] pp;// удалили адреса строк
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
18.08.2018, 08:55 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
class Foo
{
    int i;
public:
    void modify() { i = 10; }
};
 
int main(int argc, char* argv[] )
{
    Foo x;
    Foo* p = nullptr;
    Foo** q = &p;     // Почему так правильно писать, 
    Foo** q = p;      // а так не правильно.
 
    *q = &x;
 
    return 0;
}
Как правильно рассуждать работая с подобными конструкциями. Правильней ли будет говорить не операция взятия адреса, а добавить уровень косвенности? Как в сл. коде?
 
std::string s = "HelloWorld!";     // Добавляем уровень косвенности
std::string* p1 = &s;
std::string** p2 = &p1;              
std::string*** p3 = &p2;
std::string**** p4 = &p3;
std::string***** p5 = &p4;        
 
std::string**** p6 = *p5;          // Снимаем уровень косвенности
std::string*** p7 = *p6;
std::string** p8 = *p7;
std::string* p9 = *p8;
std::string s2 = *p9;
 
std::string s3 = *****p5;
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
18.08.2018, 09:25 6
ТС, просто поймите, что указатель указывает на какой-то участок памяти и сам занимает ещё какой-то.

Соответственно, указатель может указывать и на участок памяти, который занят другим указателем. И даже может указывать на свой собственный участок.
0
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
18.08.2018, 16:33 7
Без понимания базовых типов языка и того, что с ними можно делать,
в "реальности" можно ощущать дискомфорт от незнания, скажем так.
Конечно, это субъективное мнение.
Был у меня один монстр... Давным-давно... Попробуй понять и даже реализовать его
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
using namespace std;
 
int main() {
    /*
    Например, сейчас я напишу прототип функции f,
    которая [принимает указатель на функцию, которая
    принимает два аргумента - (ссылка на массив из десяти
    указателей на функции, [которые принимают один тип - U,
    а возвращают тип int], и указатель на функцию, которая
    принимает 3 ссылки на тип T и возвращает ссылку на массив
    из из трёх элементов типа T), а возвращает тип C], а возвращает указатель на массив из пяти D:
    */
    
    using T = int;
    using U = int;
    using D = int;
    using C = int;
    
D (*(f)(
         C (*)(
               int (*(&)[10])( 
                               U  
                             ),
               T( &(*) ( 
                          T&, T&, T& 
                       )
                )[4]
              )
       )
  ) [5];
    
    /* Этого монстра можно переписать так: */
 
    
  using p_to_Arr5D = D(*)[5];
  // Эквивалент:
  // typedef D (*Arr5D)[5];
  p_to_Arr5D f(
                  C (*)(
                           int (*(&)[10])(
                                              U
                                         ),
                           T( &(*)       (
                                              T&, T&, T&
                                         )
                            )[4]
                       )
              );
              
  using ref_to_Arr4T = T(&)[4];
  // Эквивалент:
  // typedef T(&ref_to_Arr4T)[4];
  p_to_Arr5D f(
                  C (*)(
                           int (*(&)[10])(
                                              U
                                         ),
                           ref_to_Arr4T (*)  (
                                                  T&, T&, T&
                                             )
                       )
              );
              
    using ptr_to_Func_PassedU_ReturningInt = int(*)(U);
    // Эквивалент:
    // typedef int(*ptr_to_Func_PassedU_ReturningInt)(U);
    
    
    using ref_to_Arr10_PtrToFunc = ptr_to_Func_PassedU_ReturningInt (&)[10];
    // Эквивалент:
    // typedef ptr_to_Func_PassedU_ReturningInt (&ref_to_Arr10_PtrToFunc) [10];
    using ptr_to_Func_Passed_TTT_Arr = ref_to_Arr4T (*) (T&, T&, T&);
    // Эквивалент:
    // typedef ref_to_Arr4T (*ptr_to_Func_Passed_TTT_Arr) (T&, T&, T&);
    p_to_Arr5D f(
                  C (*)( ref_to_Arr10_PtrToFunc, ptr_to_Func_Passed_TTT_Arr)
              );
              
    // Осталось совсем чуть-чуть :D
    using ptr_to_Func_Pass2Arg_RetC = C (*)( ref_to_Arr10_PtrToFunc, ptr_to_Func_Passed_TTT_Arr);
    // Ну, понятно какой эквивалент - просто подставить создаваемое
    // имя, чтобы оно читалось как "%name% - это указатель на функцию,
    // принимающую 2 аргумента таких-то и возвращающих тип C.
    p_to_Arr5D f(ptr_to_Func_Pass2Arg_RetC);
    
    // Вот и всё. Ух, это было просто :D
    // Как насчёт попробовать вызвать эту функцию, чтобы получить
    // указатель на массив из пяти элементов типа D? xD
    // Это вполне реально, если я нигде не ошибся.
    
    return 0;
}
Мой CLion говорит, что в этом коде есть ошибки. Поиск их - тоже хорошее упражнение на знание синтаксиса
0
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
18.08.2018, 18:29 8
Цитата Сообщение от kcalbCube Посмотреть сообщение
Для чего они могут понадобятся?
Например для создания массива указателей.
Попробуем создать массив int-ов:
C++
1
int *arr = new int[10];//каждый элемент типа int
А теперь попробуйте самостоятельно создать массив в динамической памяти, но что бы каждый элемент был указателем на int

Цитата Сообщение от kcalbCube Посмотреть сообщение
Там пишут что эта тема не обязательна.
Не обязательна для чего?
Если собираетесь писать программы уровня hello world, тогда не обязательно.
А так... не представляю себе хорошего программиста на С++ который не знает что такое указатель на указатель
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.08.2018, 19:06 9
kcalbCube, представьте себе дорожный знак. На нём надпись "Через 100 метров на перекрёстке улиц Солнечная и Гагарина - отель".
Дорожный знак - это вполне конкретный объект.
Тип этого объекта - указатель на отель.
Значение, которое хранит указатель - адрес (надпись на дорожном знаке - адрес отеля).

Давайте выразим это в коде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <string>
 
struct Hotel
{
    // тут какой-то код, который должен отражать внутреннее устройство отеля
 
    // например, имя отеля:
    std::string m_name;
 
    // и количество звёзд:
    int m_rank;
 
    Hotel(const std::string & n = "", int r = 0) : // Это конструктор - он отвечает за создание объекта
        m_name(n), m_rank(r) // это список инициализации членов
    {
        // это тело конструктора, но у нас оно пустое
    }
};
 
int main()
{
    Hotel h1("Hilton", 5); // вызов конструктора класса Hotel (создаём объект по имени h1)
 
    Hotel * directionSign // directionSign - дорожный знак (указатель на отель)
        = &h1; // хранит в качестве значения адрес вполне конкретного отеля
 
    std::cout
        << directionSign->m_name // выводим на экран название отеля (Hilton)
        << "("
        << directionSign->m_rank // выводим на экран количество звёзд (5)
        << " stars).\n";
 
    Hotel h2("Sheraton", 4); // вызов конструктора класса Hotel (создаём объект по имени h2)
 
    // Дорожные рабочие поменяли надпись на знаке. Сам знак тот же,
    // но теперь он указывает на другой объект (хранит адрес другого объекта):
    directionSign = &h2; // теперь directionSign указывает на h2, а не на h1, как было вначале
 
    std::cout
        << (*directionSign).m_name // выводим на экран название отеля (Sheraton)
        << "("
        << (*directionSign).m_rank // выводим на экран количество звёзд (4)
        << " stars).\n\n";
 
    constexpr size_t ROW = 2;
    constexpr size_t COLUMN = 3;
 
    Hotel ** ptrToPtrToHotel    // записка (указатель), указывающая, что где-то есть
                                // дорожные знаки (указатели), указывающие на отели;
        = new Hotel * [ROW];    // создать пачку (ровно ROW штук) дорожных знаков, указывающих на отели
 
    for (size_t i = 0; i < ROW; ++i) // цикл, ровно ROW раз создающий новый указатель на пачку (массив) отелей
    {
        ptrToPtrToHotel[i] // указатель на несколько отелей
            = new Hotel[COLUMN]; // несколько отелей (ровно COLUMN штук)
    }
 
    for (size_t i = 0; i < ROW; ++i)
    {
        for (size_t j = 0; j < COLUMN; ++j)
        {
            std::cout << "Enter hotel name: ";
            std::cin >> ptrToPtrToHotel[i][j].m_name;
            std::cout << "Enter hotel rank: ";
            std::cin >> ptrToPtrToHotel[i][j].m_rank;
        }
    }
 
    for (size_t i = 0; i < ROW; ++i)
    {
        for (size_t j = 0; j < COLUMN; ++j)
        {
            std::cout
                << ptrToPtrToHotel[i][j].m_name
                << "("
                << ptrToPtrToHotel[i][j].m_rank
                << " stars). ";
        }
        std::cout << "\n";
    }
}
Добавлено через 2 минуты
Примечание:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// написать так:
    std::cout
        << directionSign->m_name
        << "("
        << directionSign->m_rank
        << " stars).\n";
 
// то же самое, что написать так:
    std::cout
        << (*directionSign).m_name
        << "("
        << (*directionSign).m_rank
        << " stars).\n";
Добавлено через 17 минут
Ещё очень хорошо концепцию указателей на указатели и уровни косвенности можно представить, вспомнив старую дурацкую школьную шутку, из тех, что пишут на стенах туалетов:
Заходим в кабинку, видим надпись:
"Посмотри направо" (1 указатель - первый уровень косвенности)

поворачиваемся, смотрим (разыменовываем первый указатель, получаем значение, которое он хранит, т.е. адрес - направо), а там:
"Посмотри наверх" (2 указатель - второй уровень косвенности)

поворачиваемся, смотрим (разыменовываем второй указатель, получаем значение, которое он хранит, т.е. адрес - наверх), а там:
"Посмотри налево" (3 указатель - третий уровень косвенности)

поворачиваемся, смотрим (разыменовываем третий указатель, получаем значение, которое он хранит, т.е. адрес - налево), а там:
"Ну и хрен ли ты вертишься, дубина?" (сообщение - сам объект, на который указывала вся цепочка указателей)
3
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
19.08.2018, 11:19 10
Указатель - это переменная, которая содержит адрес другой переменной.
Перечитывать до просветления.
6
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
19.08.2018, 12:15 11
Цитата Сообщение от Kastaneda Посмотреть сообщение
Указатель - это переменная, которая содержит адрес другой переменной.
Перечитывать до просветления.
Боюсь, тут мало толку будет. Мне никогла не помогало. А в данной теме, вопрос достаточно прост и глубок. Вот у тебя уже есть слон, но зачем ещё одного покупать? То есть, опять-таки:
Цитата Сообщение от Kastaneda Посмотреть сообщение
Указатель - это переменная, которая содержит адрес другой переменной.
Допустим, есть такой адрес. Но зачем же тогда ещё одна переменная хранящая адрес адреса?
Я ещё не имею, такого опыта как у Вас Kastaneda, - даже и близко. Но я понял, что указатель, это первое знакомство с косвенным обращением в частности и уровнем косвенности, вообще. А далее, по жизни, на каждом новом уровне я постоянно убеждаюсь, что искусство состоит в оптимальном распределении косвенности.
kcalbCube, среди аргументов функции main есть такой набор строк:
C++
1
2
3
char *argv[]
//или просто
char **argv
С этим Вы знакомы, по крайней мере визуально. То есть, в случае когда указатель адресует алгоритмически обособленную (логически независимую в како-то степени) сущность, то такой указатель представляет собой ценность, как некая переменная, котороя имеет дополнительный логический смысл в программе (кроме того что она просто содержит адрес). Тогда массивы таких указателей имеют право на жизнь. А это, с точки зрения доступа, - аналогично указателю на указатель.
0
sourcerer
19.08.2018, 12:19
  #12

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
в случае когда указатель адресует алгоритмически обособленную (логически независимую в како-то степени) сущность, то такой указатель представляет собой ценность, как некая переменная, котороя имеет дополнительный логический смысл в программе (кроме того что она просто содержит адрес). Тогда массивы таких указателей имею право на жизнь. А это, с точки зрения доступа, - аналогично указателю на указатель.
IGPIGP, аккуратно сказал! Теперь он точно не поседеет :D

0
IGPIGP
19.08.2018, 12:28
  #13

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
IGPIGP, аккуратно сказал! Теперь он точно не поседеет :D
Книги, это наше всё.
Никогда не видел рыжих с сединой. Наверное, это к лучшему. :pardon:

0
2708 / 862 / 326
Регистрация: 10.02.2018
Сообщений: 2,042
19.08.2018, 12:50 14
Пример, сделать функцию, которая выделяет память и возвращает указатель на эту память через свои аргументы.
Кликните здесь для просмотра всего текста
Рассмотрим функцию, её аргументы и переменную.

1) Мы можем передать в функцию значение нашей переменной. При этом функция может что угодно делать со значением, но не сможет изменить саму переменную. Когда программа вернётся из функции значение переменной останется тем же, что было до вызова.

2) Мы можем передать в функцию указатель на переменную. При этом функция уже может изменять значение переменной. То есть, когда программа вернётся из функции значение переменной может быть отличным от значения до вызова.

3) А теперь представим, что наша переменная сама по себе является указателем. При этом всё описанное раньше будет справедливо и для неё. Если нам не требуется изменений нашей переменной, то в функцию мы будем передавать её значение (указатель). Если же нам нужно, что бы функция изменяла переменную, то мы будем передавать в неё указатель на переменную (указатель на указатель).
1
1647 / 1095 / 488
Регистрация: 17.07.2012
Сообщений: 5,356
19.08.2018, 13:15 15
Цитата Сообщение от kcalbCube Посмотреть сообщение
Для чего они могут понадобятся?
Человек задал логичный вопрос. Где на практике это все нужно?!
Цитата Сообщение от New man Посмотреть сообщение
ТС, просто поймите, что указатель указывает на какой-то участок памяти и сам занимает ещё какой-то.
Соответственно, указатель может указывать и на участок памяти, который занят другим указателем. И даже может указывать на свой собственный участок.
Цитата Сообщение от Kastaneda Посмотреть сообщение
Указатель - это переменная, которая содержит адрес другой переменной.
Перечитывать до просветления.
Это все и так понятно, можно хоть указатели создавать, хоть указатели на указатели, хоть указатели на указатели на указатели. Вопрос ТС в другом. Где это действительно будет нужно в реальной жизни? Ведь глупо создавать указатели просто так, для прикола. Выше уже были хорошие примеры - создать матрицу, изменить указатель в функции. Но
1) В С++ есть вектора(используя которые можно вообще не думать о выделении памяти), велосипедить свою матрицу на указателях смысла нет(разве только в образовательных целях)
2) С++ не Си, если нужно менять в функции указатель проще передавать его по ссылке
Возможно я не совсем прав, но мне кажется в реальном коде указатели на указатели это редкий зверь.
0
2708 / 862 / 326
Регистрация: 10.02.2018
Сообщений: 2,042
19.08.2018, 13:20 16
Цитата Сообщение от Новичок Посмотреть сообщение
Возможно я не совсем прав, но мне кажется в реальном коде указатели на указатели это редкий зверь.
Возможно и редкий, но встречается. Последний аргумент CoCreateInstance.
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
19.08.2018, 13:28 17
Честно стянуто с SO.

Если нужен список символов (слово), можно использовать char *word.
Если нужен список слов (предложение), можно использовать char **sentence.
Если нужен список предложений (монолог), можно использовать char ***monologue.
Если нужен список монологов (биография), можно использовать char ****biography.
Если нужен список биографий (библиотека), можно использовать char *****biolibrary.
Если нужен список библиотек (??lol), можно использовать char ******lol.

PS Да, это могут быть не самые лучшие структуры данных.
Why use double pointer? or Why use pointers to pointers?
1
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
19.08.2018, 18:56 18
Цитата Сообщение от kcalbCube Посмотреть сообщение
Изучаю C++, дошёл до указателей на указатели.
Для чего они могут понадобятся?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
 
static int value = 12;
static int value2 = 21;
 
void getValue(int** ppValue)
{
    *ppValue = &value;
}
 
void getValue2(int*& ref_pValue)
{
   ref_pValue = &value2;
}
 
int main(int argc, char *argv[])
{
    int* pValue = nullptr;
 
    getValue(&pValue);
    std::cout << "value is: " << *pValue << std::endl;
 
    getValue2(pValue);
    std::cout << "value is: " << *pValue << std::endl;
 
    return *pValue;
}
1
5 / 5 / 1
Регистрация: 20.07.2018
Сообщений: 24
19.08.2018, 20:04 19
Можно попробовать ассоциировать указатель с массивом,тогда думая об указателе на указатель можно будет быстрее сообразить,что это массив массивов ( ну или двумерный массив ).

А вообще,когда дело подходит к реальной практике, благодаря контексту, всё становиться ясно.Если же код становиться чересчур тяжелым, скорее всего его упростят или уже упростили. (К примеру массив объектов типа string , куда проще,чем char** или char* [] )
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
20.08.2018, 03:39 20
Можно рассмотреть более общее понятие - когда указатель указывает на структуру, содержащий указатель на такую же структуру, который в свою очередь указывает на (цикл повторяется). Всё это называется списком и достаточно широко используется. Если в структуре два указателя, указывающие аналогичным образом, то это называется бинарным деревом и тоже очень широко используется.

А просто указатель на указатель - для модификации самого указателя (т.е. адреса, содержащегося в указателе) внутри функции (в реализациях функций работы со списком может понадобиться) или для динамических многомерных массивов.
0
20.08.2018, 03:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2018, 03:39
Помогаю со студенческими работами здесь

Понимание для чего вообще нужны указатели?
Сейчас будет чистый мой тупняк. Слабонервным дальше не читать. Итак, для чего вообще нужны...

Для чего нужны и зачем использовать smart-указатели?
В Страуструпе не нашел, кто подскжает где можно про них прочитать ?)

Для чего могут на мой сайт на VPS делаться следующие запросы и что они означают?
Здравствуйте! Подскажите, пожалуйста, для чего могут на мой сайт на VPS делаться следующие запросы...

Тема указатели, зачем они нужны
Для чего придумали указатели.... Добавлено через 1 минуту для того, что бы передавать адрес...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru