Ich versuche zu verstehen, wie Speicherzeiger funktionieren. Wenn man sich die ethereumjs-vm-Implementierung ansieht, scheint es, dass der tatsächliche Wert von SLOAD zurückgegeben wird. Behandelt der Compiler die "Zeiger"-Funktionalität? (d. h. ruft SSTORE auf, wenn es geändert wurde).
Ja, der Compiler übernimmt die Pointer-Funktionalität. Sie müssen einen Speicherzeiger nicht explizit dereferenzieren, wenn Sie in den Speicherort schreiben oder lesen möchten, auf den er zeigt.
Ich denke, die Tatsache, dass sie Pointer genannt werden, ist sehr verwirrend. Es erinnert mich an C-Zeiger, aber Speicherzeiger in Solidity ähneln viel mehr C++- oder PHP-Referenzen als C-Zeigern.
Soliditätshinweise:
uint256[] public a;
constructor() public
{
a.push(1);
test(a);
}
function test(uint256[] storage b) private
{
b[0] = 7;
// a[0] is now 7
}
C++-Referenzen (ähnlich Solidity-Zeigern):
int a = 1;
int& b = a;
b = 7;
// a is now 7
PHP-Referenzen (auch ähnlich wie Solidity-Zeiger):
$a = 1;
$b = &$a;
$b = 7;
// a is now 7
C-Zeiger ( sehr verschieden von Solidity-Zeigern):
int a = 1;
int* b = &a;
b = 7;
// a is now still 1
Benutzer19510
Jesus
Benutzer19510