我知道这可能是一个低质量的问题,但请不要 - 因为我作为一个指针的初学者我很困惑,我无法在任何地方找到我的问题的答案......
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,这是一个asigning指针是十六进制值......
其他时候他们做* ptr = 85;这基本上是指向一个整数值85,所以* ptr保持值85,并且* ptr访问指针的值,其中int ptr是指针的地址,所以它对我如何SWAP地址是没有意义的当我看到他们所做的一切都是通过使用* ptr ...
交换VALUES时的指针请清除我的困惑
答案 0 :(得分:3)
我认为你刚刚得到它。它不是被交换的指针的地址,而是交换的值,因为您将指针的地址发送到Swap()函数。当你调用Swap(&x,&y)
时,一个指向x的地址指针和一个指向y的地址指针被发送到该函数,Swap()
可以使用这些地址来知道交换新值的位置。
换句话说,当你传递指针时,你传递的是一个你将使用值的内存位置,而不仅仅是值本身。这样,您的函数可以更新原始变量。这是使用指针的语言的美(和诅咒)。
关于*ptr = &address
的评论,仅当ptr
是指向指针的指针时才有效,这有点高级。每当您使用*
运算符赋值时,您都会将该指针的值赋给等号右侧的值。如果指针恰好指向另一个指针,则它可以是一个地址。
答案 1 :(得分:0)
我没有在C#中使用指针,但根据我在C
中的知识为指针分配地址,语法为
PTR =安培;地址
而不是
* PTR =安培;地址