why pointer? why not reference?