The first solution costs you the memory of a pointer, though it does not modify data like the 2 others. If one wants some sort of referential transparency, one kind of solution can pose more problems than the other, depending if scope is lexical or dynamic.