什么是Delphi相当于C中的'unsigned char **'

时间:2010-09-23 16:44:49

标签: c delphi

什么是Delphi相当于

unsigned char** ' 

在C

我不确定它是指向数组的指针还是指向指针的指针,或者它是否与C中的两个相同。

4 个答案:

答案 0 :(得分:4)

这两个在C中是相同的。但通常当你看到它时,那是一个char指针数组。我会这样声明:

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

丑陋,但是那么大多数东西都必须与C代码交互。不过它应该可行。

答案 1 :(得分:4)

修改 在C中,指向数组的指针和指向指针的指针与编译器具有不同的含义(感谢caf)。

在C数组中只是内存块。您可以在Pascal数组上使用Length(array)Low(array)High(array)之类的函数。对于Pascal程序员来说,C数组通常可以移植到Pascal指针,尤其是对各种API的函数调用。

如果我们假设usigned char可以在Delphi中翻译为byte,那么unsigned char *可以转换为^byte,通常通过type声明完成看起来像:

type
  PByte = ^byte;
  PPByte = ^PByte;

如果您尝试转换某些C代码,尤其是.h头文件,请查看headconv

答案 2 :(得分:4)

指向指针的指针和指向数组的指针是 NOT 同样的事情。

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

p1是指向unsigned char的指针。它可以指向p2中的一个元素,它是指向unsigned char的指针数组。 p3是指向unsigned char数组的指针。 Check out the C FAQ for more details.修改:Here's a better example.

答案 3 :(得分:2)

它是指向指针的指针。

指向指针的指针。 {*}

但指针索引约定意味着它可用于访问数组或指针。你通常看到这件事的第一个地方是

int main(int argc, char** argv)

这是一个使用它来索引char* s数组的例子(其分配和结构由操作系统管理)。


{*}因为数组和指针不是在c中是相同的。而是在指针上下文中使用时,数组“衰减”到指针。