When several functions share the storage for a dynamically resizeable object by sharing its address, that address must be passed and received by reference, so that if one module reallocates it, everyone knows where the new version of the object is stored. See the extended example on searching a collection of files example of passing a pointer by reference. In that example, a dynamically allocated array is shared by several functions, any of which may recycle and reallocate it.