c# - metatags - ¿Cuál es la diferencia entre hacer referencia a un valor utilizando un puntero y una palabra clave de referencia?
meta tags seo (1)
La palabra clave ref
actúa como un puntero, pero está aislada de los cambios en la ubicación real del objeto en la memoria. Un puntero es una ubicación específica en la memoria. Para los objetos recolectados en la basura, este puntero puede cambiar, pero no si utiliza la instrucción fixed
para evitarlo.
Deberías cambiar esto:
SquarePtrParam(&value);
a esto:
fixed (int* pValue = &value)
{
SquarePtrParam(pValue);
}
para asegurarse de que el puntero continúe apuntando a los datos int
que espera.
Tengo el siguiente código:
class Program
{
private unsafe static void SquarePtrParam(int* input)
{
*input *= *input;
}
private static void SquareRefParam(ref int input)
{
input *= input;
}
private unsafe static void Main()
{
int value = 10;
SquarePtrParam(&value);
Console.WriteLine(value);
int value2 = 10;
SquareRefParam(ref value2);
Console.WriteLine(value2);
//output 100, 100
Console.ReadKey();
}
}
¿Cuál es la diferencia entre pasar un puntero y una palabra clave ref como parámetro en el método?