указатель на указатель: как и почему?

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

указатель на указатель: как и почему?

Сообщение freeman » 07.01.2011 19:01:39

Всем привет. В языке С есть сложные конструкции, типа: "указатель на указатель"
Код: Выделить всё
int **ptop;
А есть ли нечто подобное в freepascal? И раз уж на то пошло, то кто-нибудь может объяснить, каковы плюсы таких нагромождений? Сам я любитель, типа хобби. Если есть профи, то хотел бы услышать ваши мысли на тему: зачем нужны такие сложные указатели? 8)
freeman
незнакомец
 
Сообщения: 1
Зарегистрирован: 07.01.2011 18:50:50

Re: указатель на указатель: как и почему?

Сообщение Vadim » 07.01.2011 19:09:20

freeman
На вскидку - ppchar, т.е. указатель на указатель на символ. Применяется для работы с массивами, которые формируют сишные функции из всевозможных динамических библиотек.
Больше ничего не припомню. В своих программах другие подобные типы никогда не использовал.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: указатель на указатель: как и почему?

Сообщение alexs » 07.01.2011 20:35:56

freeman писал(а):Всем привет. В языке С есть сложные конструкции, типа: "указатель на указатель"

Совет - как старайся как можно меньше использовать в явном виде указатели (особенно не типизированные).
Практически на все случаи жизни есть инструменты в самом языке.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4062
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: указатель на указатель: как и почему?

Сообщение Nik » 07.01.2011 20:49:14

А есть ли нечто подобное в freepascal? И раз уж на то пошло, то кто-нибудь может объяснить, каковы плюсы таких нагромождений?

А оно нам надо, нагромождения эти?
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: указатель на указатель: как и почему?

Сообщение devels » 07.01.2011 21:50:51

Конечно есть :o

Код: Выделить всё
type
   pint   = ^integer;
   ppint = ^pint;

var
  X: PPInt;
begin
   new(X);
   new(X^);
   X^^ := 20;
   WriteLn(X^^);
   dispose(X^);
   dispose(X);
end;


Честно говоря как это использовать я не знаю, ты бы мог показать исходники на си.
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

Re: указатель на указатель: как и почему?

Сообщение Odyssey » 07.01.2011 23:29:28

freeman писал(а):В языке С есть сложные конструкции, типа: "указатель на указатель" ... А есть ли нечто подобное в freepascal? И раз уж на то пошло, то кто-нибудь может объяснить, каковы плюсы таких нагромождений? ... зачем нужны такие сложные указатели?

В C указатель -- один из необходимых типов, на котором строится работа с более сложными типами -- строками, массивами. Поэтому двойные указатели применяются как минимум для двух целей:
1) Передача по ссылке обычного указателя, например в функцию. Тогда внутри функции можно просто перенацелить указатель "второго уровня" с одного указателя "первого уровня" на другой, без операций с содержимым. Например, подменить одну строку другой.
2) Многомерные типы, например массив строк. Массив в C = указатель на первый элемент, строка = указатель на первый символ. Массив строк = указатель на указатель на первый символ первой строки.

В Pascal работа с указателями полностью поддерживается, как минимум для взаимодействия с библиотеками на C, но чаще всего есть собственные более высокоуровневые конструкции, которые оборачивают работу с указателями и выделение памяти, чтобы мы могли заниматься более важными вещами. Например, для массива строк есть TStringList.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru