Visual Basic .NET中的C风格指针

我一直在研究Visual Basic .NET中的C风格指针。 我遇到过http://support.microsoft.com/kb/199​​824?wa=wsignin1.0,但我不知道这是正确的,也不知道如何应用它。 我已经使用c中的程序编写了一个简单的指针,我希望它将行转换为Visual Basic,并在必要时添加注释。 这是C:

int main() { int *myNumber=3; //the * means it's a pointer doubleIt(*myNumber); //we use the void, the * means it returns a value not address printf("%d",myNumber); //we print the variable return 0; //we terminate the function } void doubleIt(int input) { input*=2; //double the input } 

您的C代码存在一些问题,其中之一是:

 int *myNumber=3; //the * means it's a pointer 

如果没有先为其分配内存,就不能为这样的指针赋值。

所以你会做以下事情:

 int* myNumber = malloc(sizeof(int)); *myNumber = 3; free(myNumber); 

VB.NET没有指针的概念。 所有东西(即每个Object )都是一个引用,并且它与没有使用Interop的情况下的指针接近。 如果你需要互操作,那么IntPtr类型可以用来表示指针类型。

您的VB.NET程序可能如下所示:(如果语法不完全正确,请原谅我,它已经有一段时间了)

 Sub Main Dim myNumber As Integer = 3 doubleIt(myNumber) Console.WriteLine(myNumber) End Sub Sub doubleIt(ByRef val As Integer) val *= 2 End Sub 

在.NET中,有两种对象类型。 有引用类型( Class )和值类型( Structure )。 在.NET中,不是为每个变量决定该变量是否为指针,而是所有引用类型对象始终被视为指针而所有值类型对象都不是。 所以,例如:

 'Create one object of each type Dim builder As New StringBuilder() 'Reference type Dim size As Integer 'Value type 'Make a "copy" of each Dim copyBuilder As StringBuilder = builder Dim copySize As Integer = size 'Change the value of the original object builder.Append("Test") size = 33 'Check if the "copy" changed Console.WriteLine("{0} = {1}", builder.ToString(), copyBuilder.ToString()) Console.WriteLine("{0} <> {1}", size, copySize) 

当您运行该代码时,它将输出:

 Test = Test 33 <> 0 

因此,正如您所看到的, StringBuilder对象的作用类似于指针,而Integer对象则不然。 但是,正如Tony指出的那样,即使使用值类型,也可以将“通过引用”传递给方法。 当一个方法指定其参数之一是ByRef而不是ByVal ,这意味着该方法可以在内部更改变量的值,并且更改将影响调用代码中的变量。

此外,您可能想要对拳击和拆箱进行一些研究。