什么是Delphi相当于
unsigned char** '
在C
我不确定它是指向数组的指针还是指向指针的指针,或者它是否与C中的两个相同。
答案 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中是相同的。而是在指针上下文中使用时,数组“衰减”到指针。