c#文档中的星号前后变量

c#文档中的星号前后变量,c#,pointers,C#,Pointers,下面的代码,“*”在做什么 for (Char* ptr1 = (Char*)bstr1.ToPointer(), ptr2 = (Char*)bstr2.ToPointer(); *ptr1 != 0 && *ptr2 != 0; 它们是不安全的指针。寻找C#指针、不安全的C#指针和类似的指针。喜欢和 那个密码,如果是的话 for (Char* ptr1 = (Char*)bstr1.ToPointer(), ptr2 = (Char*

下面的代码,“*”在做什么

for (Char* ptr1 = (Char*)bstr1.ToPointer(), ptr2 = (Char*)bstr2.ToPointer();
                    *ptr1 != 0 && *ptr2 != 0;

它们是不安全的指针。寻找C#指针、不安全的C#指针和类似的指针。喜欢和

那个密码,如果是的话

for (Char* ptr1 = (Char*)bstr1.ToPointer(), ptr2 = (Char*)bstr2.ToPointer();
                *ptr1 != 0 && *ptr2 != 0;
                ptr1 = IntPtr.Add(ptr1, 1), ptr2 = IntPtr.Add(ptr2, 1))
(请注意,增加
ptr1
ptr2
的代码部分可能有点不同。遗憾的是,
IntPtr
没有
++
运算符)

循环
bstr1
bstr2
中同时包含的字符,直到其中一个为
'\0'
。给定名称,
bstr1
bstr2
可能是
BSTR
(COM编程中使用的Windows unicode字符串)


您知道
*ptr1
ptr1

指向的内存位置中包含的
char
,它们是不安全的指针。寻找C#指针、不安全的C#指针和类似的指针。喜欢和

那个密码,如果是的话

for (Char* ptr1 = (Char*)bstr1.ToPointer(), ptr2 = (Char*)bstr2.ToPointer();
                *ptr1 != 0 && *ptr2 != 0;
                ptr1 = IntPtr.Add(ptr1, 1), ptr2 = IntPtr.Add(ptr2, 1))
(请注意,增加
ptr1
ptr2
的代码部分可能有点不同。遗憾的是,
IntPtr
没有
++
运算符)

循环
bstr1
bstr2
中同时包含的字符,直到其中一个为
'\0'
。给定名称,
bstr1
bstr2
可能是
BSTR
(COM编程中使用的Windows unicode字符串)


您知道
*ptr1
ptr1

指向的内存位置中包含的
字符。通常,基本变量(如char、int、float等)作为值传递。这意味着,如果您将该变量传递到一个方法中并更改该方法中的值,那么调用方上下文中的该变量将不会更改。复杂磁带(类)作为引用传递。您可以在被调用的方法中更改它们,它们也可以在调用方中更改。使用指针,您可以传递基本变量引用,从而在被调用的方法中更改它们,在调用方中也会更改它们。你也可以用指针做一些其他的事情。它们是一个复杂的结构。我不建议在C#中使用它们。

这些是指针。通常,基本变量(如char、int、float等)作为值传递。这意味着,如果您将该变量传递到一个方法中并更改该方法中的值,那么调用方上下文中的该变量将不会更改。复杂磁带(类)作为引用传递。您可以在被调用的方法中更改它们,它们也可以在调用方中更改。使用指针,您可以传递基本变量引用,从而在被调用的方法中更改它们,在调用方中也会更改它们。你也可以用指针做一些其他的事情。它们是一个复杂的结构。我不建议在C#中与他们合作。

关于任何软件或库(甚至windows系统)文档的问题被认为是离题的。关于任何软件或库(甚至windows系统)文档的问题稍微增加:实际上,引用类型和值类型都不是通过引用传递的,除非对方法中的参数使用
ref
。对实例的实际引用是通过值传递的,这意味着您不能将另一个实例重新分配给传递给该方法的实例,并且期望调用代码也具有新实例。当然,您可以更改参数引用的实例的成员(其本身是通过值传递的)。稍微添加:实际上,引用类型和值类型都不是通过引用传递的,除非您在方法中对参数使用
ref
。对实例的实际引用是通过值传递的,这意味着您不能将另一个实例重新分配给传递给该方法的实例,并且期望调用代码也具有新实例。当然,您可以更改参数引用的实例的成员(参数本身是通过值传递的)。