Указатели ничем не отличаются от указателей, поскольку модификации не видны снаружи при передаче по значению функции:
void foo(int* p) { p = 0; } // only modifies the local p
void foo(int a) { a = 0; } // only modifies the local a
Однако указатели позволяют вам изменять то, на что указывает указатель, и что может наблюдаться вызывающим абонентом:
// assume p points to an int
void bar(int* p) { *p = 42; }
Это не изменит сам p
. При вызове через
int x;
int xp = &x;
bar(xp);
тогда p
внутри bar
является копией xp
, хотя оба они указывают на один и тот же int
.
Но когда вы звоните new
, затем new
вернет вам указатель на выделенную память, поэтому вам нужно изменить значение указателей, а не только указатель. Либо передайте его по ссылке, либо верните указатель из функции (делая его параметром в любом случае бесполезно).