以下代码,'*'在做什么?
for (Char* ptr1 = (Char*)bstr1.ToPointer(), ptr2 = (Char*)bstr2.ToPointer();
*ptr1 != 0 && *ptr2 != 0;
答案 0 :(得分:2)
它们是不安全的指针。寻找C#指针,不安全的C#和类似的。与https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/unsafe和https://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))
(请注意,增加ptr1
和ptr2
的代码部分可能会略有不同。遗憾的是++
没有IntPtr
运算符)
将bstr1
和bstr2
中包含的字符循环,直到其中一个字符为'\0'
。鉴于名称,bstr1
和bstr2
可能是BSTR
(COM编程中使用的Windows unicode字符串)
您*ptr1
char
包含在ptr1
“指向”的内存位置中。{/ p>
答案 1 :(得分:0)
这些是指针。通常,基本变量(如char,int,float,...)作为值传递。这意味着如果将该变量传递给方法并更改该方法中的值,则调用者上下文中的变量根本不会被更改。复杂磁带(类)作为参考传递。您在被调用的方法中更改它们,并且它们也在调用者中更改。使用指针,您可以传递基本变量引用,从而在被调用的方法中更改它们,并且它们也会在调用者中更改。你也可以用指针做一堆其他的东西。它们是一个复杂的结构。我不建议在C#中使用它们。