| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > в чем разница |
| Автор: bend0r 14.9.2005, 13:08 | ||||||||
в учебнике Павловской код линейного списка такой
если заменить на
в чем будет разница и вообще для чего надо было использовать указатель на указатель? |
| Автор: Дрон 14.9.2005, 13:10 | ||
Я рад за неё. А где вопрос? |
| Автор: bend0r 14.9.2005, 13:14 |
| во терь есть вопрос, не туда нажал |
| Автор: Дрон 14.9.2005, 13:26 |
| Ок Разница есть. В последней строчке функции add() мы присаеваем новое значение для pend. Если сделать так, как ты написал во втором варианте, то при вызове функции будет создана копия pend, все изменения которой после выхода из функции будут потеряны. Как я понимаю, это учебник по Си, а не С++? |
| Автор: srd 14.9.2005, 13:31 |
| Судя по оператору new - это всё-таки Си++. Какой ужас |
| Автор: Дрон 14.9.2005, 13:37 | ||
Опа... Тогда, конечно, ужас... |
| Автор: bend0r 14.9.2005, 14:12 | ||
| всеравно не понятно В моем варианте в add() передается указатель, делается копия его, сама функцияя работает с тем на что он указывает, при выходе из функции потерены будут если тока изменения адреса указателя. так ведь оно или не так? вот щас тестил помоему тоже самое:
результат: Do fun 10 V fun 15 Posle 15 a= 15 p/s/ учебник по Си/Си++. учебник вообще зло не кому не советую если узучать с 0 и это первый язык который изучаете. мне его мой препод посоветовал |
| Автор: Дрон 14.9.2005, 14:29 |
| bend0r Блин... А ты ведь прав. Там никакой разницы. |
| Автор: Doc_d0s 14.9.2005, 17:11 |
| Просто мы когда используем *pend а не **pend меняем указатель лишь в теле ф-ии, но не глобально ИМХО такой подход реален если пенд у тя будет глобальным и не будет параметром ф-ии |
| Автор: bend0r 14.9.2005, 19:18 | ||
не совсем понятно. есть вообще какое нибуть практическое применение у указателю на указатель(кроме динамической матрицы)? небольшой пример не помешалбы |
| Автор: Mayk 14.9.2005, 19:36 | ||||||
Ты привёл его сам в первом посте Обрати внимание на *pend=pv; Этой командой изменяется pend из ф-ции main: add(&pend,i); В твоём втором примере(когда передаётся просто указатель -- void add(Node *pend, int d);) указатель копируется, и ф-ция add работает с копией указателя. Указатель из ф-ции main НЕ изменяется функцией add из второго примера. А вот в случае, когда передается указатель на указатель на pend, то ф-ция add может заменить значение указателя в функции main. Чтоб стало наглядно понятно замени в первом примере основной цикл на
а во втором на
Ф-ция printf("pend=%p\n",pend); выведет значение указателя в удобо читаемом виде. Во втором примере оно не будет изменяться. |
| Автор: BreakPointMAN 14.9.2005, 21:26 | ||||||||
Когда-то я тоже читал Павловскую... и сделал на форзаце сей книги (да, есть у меня вредная привычка читать книгу с карандашом...) %)) такие пометки:
за точность написанного не ручаюсь, ибо был молодой и зелёный... %)) но вроде так... )) |
| Автор: bend0r 14.9.2005, 22:43 |
| всем спасиба разобрался. |