Estoy tratando de entender cómo funcionan los punteros de almacenamiento. Al observar la implementación de ethereumjs-vm, parece que el valor real se devuelve desde SLOAD. ¿El compilador maneja la funcionalidad del 'puntero'? (es decir, llama a SSTORE si se modifica).
Sí, el compilador maneja la funcionalidad del puntero. No es necesario eliminar la referencia explícita de un puntero de almacenamiento cuando desee escribir o leer desde la ubicación de almacenamiento a la que apunta.
Creo que el hecho de que se llamen punteros es muy confuso. Me recuerda a los punteros de C, pero los punteros de almacenamiento en Solidity se parecen mucho más a las referencias de C++ o PHP que a los punteros de C.
Indicadores de solidez:
uint256[] public a;
constructor() public
{
a.push(1);
test(a);
}
function test(uint256[] storage b) private
{
b[0] = 7;
// a[0] is now 7
}
Referencias de C++ (similares a los punteros de Solidity):
int a = 1;
int& b = a;
b = 7;
// a is now 7
Referencias de PHP (también similares a los punteros de Solidity):
$a = 1;
$b = &$a;
$b = 7;
// a is now 7
Punteros C ( muy diferentes de los punteros Solidity):
int a = 1;
int* b = &a;
b = 7;
// a is now still 1
usuario19510
jesús
usuario19510