在c#文档中的变量之前和之后加注星标

时间:2017-06-08 08:50:44

标签: c# pointers

以下代码,'*'在做什么?

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

2 个答案:

答案 0 :(得分:2)

它们是不安全的指针。寻找C#指针,不安全的C#和类似的。与https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/unsafehttps://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/unsafe-code-pointers/pointer-types

一样

该代码,如果是

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

(请注意,增加ptr1ptr2的代码部分可能会略有不同。遗憾的是++没有IntPtr运算符)

bstr1bstr2中包含的字符循环,直到其中一个字符为'\0'。鉴于名称,bstr1bstr2可能是BSTR(COM编程中使用的Windows unicode字符串)

*ptr1 char包含在ptr1“指向”的内存位置中。{/ p>

答案 1 :(得分:0)

这些是指针。通常,基本变量(如char,int,float,...)作为值传递。这意味着如果将该变量传递给方法并更改该方法中的值,则调用者上下文中的变量根本不会被更改。复杂磁带(类)作为参考传递。您在被调用的方法中更改它们,并且它们也在调用者中更改。使用指针,您可以传递基本变量引用,从而在被调用的方法中更改它们,并且它们也会在调用者中更改。你也可以用指针做一堆其他的东西。它们是一个复杂的结构。我不建议在C#中使用它们。