C# 使用&;的指针声明语法;和Intptr。都一样吗?
案例1: 案例2: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应用程序上:- 我从
int i;
int* pi = &i;
两种情况相同吗
我的目的是:
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 ;