Арифметика указателей в PascalABC.NET

Итак вопрос: Есть необходимость прибавить к адресу переменной типа integer целое число, но при выполнении кода

begin
var a:=1;
var b:=@a;
b+=2;
end;

вылетает ошибка. Как быть?

…Почитайте как работают ссылки в справке… Там ещё много таких моментов. b^+=2

Присвоение ведётся переменной, на которую ссылается ссылка, а не самому адресу.

А, ну а зачем вам? Ну можно конечно…

begin
  var a := 1;
  var b := @a;
  var i := integer(b);
  i += 2;
  b := PInteger(pointer(i));
end.

Но где такое может пригодится? Массивы хотите так делать как в C++?

2 лайка

Почти. Библиотека цветовых пространств ведь ещё в разработке!:slight_smile:

“Мсье знает толк в извращениях!” (с)

1 лайк

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

для этого используются динамические массивы

Ссылки мне нужны для оптимизации чтения/записи System.Drawing.Bitmap. То есть не через SetPixel/GetPixel, а напрямую в память. Разумеется, делать массивы через ссылки я не буду!

Посмотрите коды ABCObjects - там была работа с Bitmap напрямую

1 лайк

Если найдёте мне тоже скиньте номер строчки.

GraphABCHelper, 121

1 лайк

Посмотрю обязательно, хотя реализацию уже нашёл. Если кому интересно, приведу простой пример кода.

Код выглядит далеко не так жутко, как в C++. Скажу даже больше: он (код) вообще не похож на Сишный.