Tengo este contrato muy simple:
pragma solidity ^0.4.18;
contract C{
uint public a = 9;
uint[] public data;
function f(uint _a) public{
a = _a;
uint[] y;
y.push(2900);
}
}
Entiendo que las variables locales de tipo matriz (uint[] y) hacen referencia al almacenamiento, pero no entiendo por qué y.push(2900) modifica la variable de almacenamiento llamada a, y sin importar el valor que presione para y, siempre incrementa la variable a con una unidad. Gracias
Está declarando y
como un almacenamiento, pero lo dejó sin inicializar, por lo que y
apunta a la misma ranura que a
.
Los primeros 32 bytes de una matriz en almacenamiento son la longitud de la matriz, y luego siguen los datos.
Entonces, el primero a = _a
establecerá la longitud de la matriz. Y luego y.push(2900)
agregará un nuevo valor a la matriz incrementando su longitud.
sourav
ismael
sourav
ismael