Что такое Delphi-эквивалент 'unsigned char **' в C - PullRequest
2 голосов
/ 23 сентября 2010

Что такое Delphi-эквивалент

unsigned char** ' 

в C

Я не уверен, является ли он указателем на массив или указателем на указатель или эти две вещито же самое в C.

Ответы [ 4 ]

4 голосов
/ 23 сентября 2010

Указатель на указатель и указатель на массив НЕ одно и то же.

unsigned char** p1;
unsigned char* p2[N];
unsigned char (*p3)[N];

p1 - указатель на указатель на неподписанный символ. Он может указывать на элемент в p2, который является массивом указателей на unsigned char. p3 - указатель на массив беззнаковых символов. Дополнительные сведения см. В разделе C FAQ. Редактирование: Вот лучший пример.

4 голосов
/ 23 сентября 2010

РЕДАКТИРОВАТЬ В Си и указатель на массив, и указатель на указатель имеют различное значение для компилятора (спасибо caf).

В массивах Си это просто блок памяти.Нет такой функции, как Length(array), Low(array) или High(array), которую вы можете использовать в массивах Pascal.Для практических целей программистам Pascal массивы C обычно могут быть перенесены на указатели Pascal, особенно при вызовах функций для различных API.

Если мы предположим, что usigned char может быть переведено в byte в Delphi, то unsigned char * можно перевести на ^byte, что обычно делается с помощью объявления type, которое может выглядеть следующим образом:

type
  PByte = ^byte;
  PPByte = ^PByte;

Если вы пытаетесь преобразовать некоторый код C, особенно заголовочный файл .h, посмотрите на headconv .

4 голосов
/ 23 сентября 2010

Они одинаковы в C. Но обычно, когда вы видите это, это массив указателей на символы.Я бы объявил это так:

type
  PAnsiCharArray = ^TAnsiCharArray;
  TAnsiCharArray = array[0..0] of PAnsiChar;

Ужасно, но опять же, как и большинство вещей, которые должны взаимодействовать с C-кодом.Это должно работать, хотя.

2 голосов
/ 23 сентября 2010

это указатель на указатель.

Это только указатель на указатель.{*}

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

int main(int argc, char** argv)

, и это пример использования его для индексации в массив char* s (выделение и структурирование которого управлялось ОС).


{*} Поскольку массив и указатель не одно и то же в c.Скорее массив «распадается» на указатель при использовании в контексте указателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...