回答
编辑 在C中,指向数组的指针和指针的指针与编译器有不同的含义(谢谢caf)。
在C数组中只是内存块。没有像Length(array)
,Low(array)
或High(array)
这样的功能,您可以在Pascal阵列上使用。对于Pascal程序员的实际用途,C数组通常可以移植到Pascal指针,特别是在对各种API的函数调用中。
如果我们假设usigned char
可以转换为德尔福byte
,然后unsigned char *
可以转化为^byte
通常是通过type
声明,可以像做:
type
PByte = ^byte;
PPByte = ^PByte;
如果您正试图将一些C代码,特别是.h
头文件然后看看headconv。
这两者在C中是一样的。但通常当你看到这些时,这是一个char指针数组。我会这样声明:
type
PAnsiCharArray = ^TAnsiCharArray;
TAnsiCharArray = array[0..0] of PAnsiChar;
丑陋,但再次如此是大多数的东西,必须与C代码交互。它应该工作,但。
在D2009 +中,您可以通过{$ POINTERMATH ON}避免这种混乱。 FPC永远有这个默认设置。 – 2010-09-23 18:53:55
它是一个指向指针的指针。
它是只有一个指向指针的指针。 {*}
但是指针索引约定意味着它可用于访问数组或指针。通常看到这件事的第一个地方是
int main(int argc, char** argv)
,这是用它来索引到的char*
秒(其中由OS管理的分配和结构化)的阵列的示例。
{*}因为数组和一个指针是不 c中的同样的事情。当在指针上下文中使用时,数组会“衰减”到指针。
一个指向指针的指针和一个指向数组的指针是不是是一样的东西。
unsigned char** p1;
unsigned char* p2[N];
unsigned char (*p3)[N];
p1
是指向无符号字符的指针。它可以指向p2
中的一个元素,这是一个指向unsigned char的指针数组。 p3
是一个指向unsigned char数组的指针。Check out the C FAQ for more details.编辑:Here's a better example.
这实际上只是分割头发,因为C没有真正的数组这样的东西,无论如何,只是指针和[索引语法]可以应用于它们使指针看起来像数组。出于所有实际目的,它们都是一样的。 – 2010-09-23 17:28:27
他们不是。 'p3'和'p2'是不同的类型。它们之间不存在隐式转换,例如'p2'和'p1'的类型。从指针到数组的指针转换为指针指针(反之亦然)会导致程序崩溃。 – 2010-09-23 17:39:26
在这个例子中编辑我的上面的评论来得太迟了:http://c-faq.com/aryptr/ptrtoarray.html – 2010-09-23 17:47:08
- 1. 在C语言什么是FTEll()相当于德尔福
- 2. 德尔福相当于C#的DataGridView
- 3. 德尔福 - 相当于C#的三元运算符?
- 4. 德尔福相当于从C
- 5. 德尔福/ C + + DLL的问题 - 无符号长与无符号整型?
- 6. 加密字符串从德尔福C#
- 7. 德尔福的德文字符集
- 8. 德尔福:什么是Application.Handle?
- 9. 什么是dxGDIPlusClasses.dcu? (德尔福)
- 10. 什么是德尔福相当于“+ =”用于添加元素到一个集合?
- 11. 德尔福#IF(调试)相当于?
- 12. 德尔福 - 是否有任何相当于C#锁?
- 13. 德尔福/帕斯卡尔字符串文字到C/C++
- 14. 德尔福警告 - W1002符号“FileSetDate”是特定于平台
- 15. 更改德尔福7中的字符
- 16. 德尔福TJson.ObjectToJsonString(TFoo):从JSON字符串
- 17. 德尔福7 - 字符集REST JSON
- 18. 德尔福字符串共享问题
- 19. 德尔福 - 相当于C#DateTime.IsDaylightSavingTime()方法需要
- 20. 德尔福 - 字符串中的单引号
- 21. 德尔福 - 当调用DragAcceptFiles
- 22. 如何在德尔福TEdit中隐藏脱字符号?
- 23. 是否有一个相当于德尔福在C#中的“with”命令?
- 24. 德尔福:什么是一个数据访问的过滤字符串中的转义字符,如TVirtualTable
- 25. 德尔福,IXMLDOMDocument2,加载失败,因为无效字符
- 26. 德尔福相当于在Visual Studio中的Ctrl + K + D?
- 27. 的Visual Studio相当于德尔福书签
- 28. C中有符号和无符号字符需要什么?
- 29. 阅读°的XML德尔福度的符号2010
- 30. 德尔福HID Delphi7和德尔福XE2
这就是我所想的,因为PByte已经存在了,我打算声明PPByte =^PByte并尝试。只是想要一些确认。 – MikeT 2010-09-23 21:49:41
对不起,但你的第一句话是完全不正确的。一个指向数组的指针(例如'unsigned char(* x)[100]')被编译器视为非常不同的指针('unsigned char ** x')。前者指向100个字符的实际块;后者指向另一个指针值。 – caf 2010-09-23 23:59:13
caf:你说得对,我编辑了我的答案,谢谢! – 2010-09-24 05:22:56