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


#1

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

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

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


Ошибки PascalABC.NET
#2

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


#3

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


#4

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

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

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


#5

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


#6

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


#7

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


#8

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


#9

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


#10

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


#11

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


#12

GraphABCHelper, 121


#13

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


#14

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