C# 使用&;的指针声明语法;和Intptr。都一样吗?

C# 使用&;的指针声明语法;和Intptr。都一样吗?,c#,C#,案例1: 案例2: int i; int* pi = &i; 两种情况相同吗 我的目的是: 我正在将一个值复制到字符串变量 将字符串转换为字节数组 使用Marshal.Alloc(sizeofBytesArray)获取IntPtr ptrToArray marshal.copy(数组,0,ptrToArray,sizeofBytesArray) 通过使用结构并通过SendMessage win32 api传递结构将此ptrToArray发送到vb6应用程序 在VB6应用程序上:- 我从

案例1:

案例2:

int i;
int* pi = &i;
两种情况相同吗

我的目的是:

  • 我正在将一个值复制到字符串变量
  • 将字符串转换为字节数组
  • 使用Marshal.Alloc(sizeofBytesArray)获取IntPtr ptrToArray
  • marshal.copy(数组,0,ptrToArray,sizeofBytesArray)
  • 通过使用结构并通过SendMessage win32 api传递结构将此ptrToArray发送到vb6应用程序
  • 在VB6应用程序上:-

  • 我从提供数组地址的结构中提取值
  • 使用CopyMemory将字节数组数据复制到字符串中
  • 更多代码:

    int i;
    IntPtr pi = &i;
    

    根据msdn页面:-

    IntPtr类型可以由支持指针的语言使用,也可以作为在支持和不支持指针的语言之间引用数据的常用方法

    IntPtr对象也可用于保存句柄。例如,在System.IO.FileStream类中广泛使用IntPtr实例来保存文件句柄

    这两种情况是一致的吗

    不,它们不一样, 区别在于
    IntPtr

    外汇

    但要做同样的事情,必须将
    IntPtr
    转换为int*

      int i = 10 ; 
      int *pi = i ; 
      int c = *pi ; // would work 
    
    IntPtr
    的内部表示类似于
    void*
    ,但它像一个整数一样公开。只要需要存储非托管指针并且不想使用不安全的代码,就可以使用它

    它有两个局限性:

  • 不能直接取消引用它(必须将其转换为真正的指针)
  • 它不知道它指向的数据类型。(因为
    无效*

  • 不要在C语言中使用指针,除非你处理的是较低级别的东西,如C++互操作、P/Unjk等。@高核:我们不知道OP到底在做什么。这可能很好,是的,我知道了。这就是我删除注释的原因。我使用的是copymemory,所以我确实需要使用指针…看起来您可能需要
    char*
    byte*
    int*
    多得多。无论如何,发布一些具体的代码。封送拆收器通常允许您使用
    string
    StringBuilder
      int i = 10 ; 
      int *pi = i ; 
      int c = *pi ; // would work 
    
     int i =10 ; 
     IntPtr pi = &i ; 
     int *tempPtr = (int*)pi ; 
     int c = *tempPtr ;