对c#中的指针感到困惑
本文关键字:指针 | 更新日期: 2023-09-27 18:04:29
我知道这可能是一个低质量的问题,但请不要代表我,因为作为一个初学者,我对这个问题非常困惑,我找不到我的问题的答案。
using System;
class MyTest
{
unsafe static void Swap( int *a, int *b )
{
int tmp = *a;
*a = *b;
*b = tmp;
}
unsafe static void Main(string [] args)
{
int x = 5;
int y = 12;
Console.WriteLine( "x = {0}, y = {1}", x, y );
Swap( &x, &y );
Console.WriteLine( "x = {0}, y = {1}", x, y );
}
}
我真的很困惑这个....有时它们会*ptr=&address,它将十六进制值address分配给指针....因此,这是指向一个地址,这是分配给指针一个十六进制值…
*ptr=85;这基本上是给指针赋值85的整数值,所以*ptr保存85的值,做*ptr访问指针的值,其中int ptr是指针的地址,所以对我来说,当我看到他们所做的只是通过使用*ptr交换值时,他们如何交换指针的地址是没有意义的…Please clear my confusion
我想你已经明白了。被交换的不是指针的地址,而是被交换的值,因为您将指针的地址发送给Swap()函数。当你调用Swap(&x,&y)
时,一个指向x的地址指针和一个指向y的地址指针被发送给函数,Swap()
可以使用这些地址知道在哪里放置交换的新值。
换句话说,当你传递指针时,你传递的是一个内存位置,你将使用其中的值,而不仅仅是值本身。通过这种方式,您的函数可以更新原始变量。这就是使用指针的语言的优点(也是缺点)。
至于你对*ptr = &address
的评论,这只有在ptr
是指向指针的指针时才有效,这是更高级的。无论何时使用*
操作符赋值,都是将该指针的值赋给等号右侧的值。如果指针碰巧指向另一个指针,它可以是一个地址。
我没有在c#中使用指针,但根据我对C的了解
为指针分配地址,语法为
ptr =,地址
而非
* ptr =,地址