int* 和 IntPtr 和有什么不一样?

Jiale Xue - MSFT 46,466 信誉分 Microsoft 供应商
2024-04-17T07:13:41.9933333+00:00

只是好奇 C# 中这些东西的区别:int* 和 IntPtr ?

还有:

int varTest = 123;

IntPtr PT = (IntPtr)(&varTest);

int* PointerTo = &varTest;

long LongAdd = (long)PointerTo;

int IntAdd = (int)PointerTo;

MessageBox.Show(LongAdd.ToString());  //Same
MessageBox.Show(IntAdd.ToString());  //Same
MessageBox.Show(PT.ToString());  //Same

Note:此问题总结整理于: What is the differences between int* and IntPtr ?

C#
C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
188 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 48,571 信誉分 Microsoft 供应商
    2024-04-17T08:31:02.1866667+00:00

    int* i 表示 i 的类型是“指向 int 的指针”,您可以将其读作 i 是指向整数的指针。

    也就是说,第一部分代表变量类型(指向int的指针),第二部分代表名称(i)。

    IntPtr 类型被设计为一个整数,其大小是特定于平台的。 也就是说,此类实例在 32 位硬件和操作系统上预计为 32 位,在 64 位硬件和操作系统上预计为 64 位。

    它被称为 IntPtr,因为要从非托管本机代码 C/C++ 使用它,您必须使用模拟类型:intptr_t。 C# 的 IntPtr 完全映射到 C/C++ 的 intptr_t。 它可以被实现为intptr_t。 在C/C++中,确保intptr_t类型的大小与void*类型的大小相同。

    并且您需要将代码放入 unsafe{...} 中。

    更多详细信息您可以参考以下链接。

    Just what is an IntPtr exactly?

    IntPtr Struct


    如果回复有帮助,请点击“接受答案”并点赞。

    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。