I have a couple of questions regarding local variables and creating structs and arrays.
As I understand they can be stored in memory and in storage. If they defined as state variables they will be stored in the blockchain. I found that I can create memory array as a local variable using new clause and specifying the array size.But I cannot find a way to declare array(or struct) as a storage array inside of the function.Is it possible to do? The only thing I've understood I can create a storage pointer to already existed array defined as the state variable.That it's another question why do we need some, if by changing it we change the original array? And one more question about the following statement from the documentation:
Local Variables of structs, array are always stored in storage by default.
Could you give an example of this?
//local variables testing
uint[] public some_arr;
function test_local_var() public {
some_arr.push(1);
some_arr.push(2);
some_arr.push(3);
uint[] storage new_arr = some_arr;//Why do we need to create a storage pointer to array if by changing it we change an original array
new_arr[0]=3232;
new_arr.push(4);
uint[] memory new_arr2 = new uint[](7); //how to create storage array inside of a function? I found the way how to create memory arrays
}
Thank you in advance!
Best Answer
You cannot do that, creating new storage slots inside of a function isnt possible at all. (well, you could do it in assembly, but you could manage that slot only by reading and writing to it via assembly, you wouldnt be able to name it and access it with solidity afterwards at all).
Well, we don't. It's just meant as a shortcut to write cleaner code. Let's take this storage layout as example.
Now let's say i want to modify b inside a struct inside my annoying mapping. I could spend 2 hours rewriting
over and over again, or i could just write
once, and then access it directly using toModify without having to type the whole thing again everytime