>>764
関数の引数で渡されるのは"同値のコピー"なのよ

void func1(int b) {...}
void func2(void) {
int a = 100;
func1(a);
}

func2からaを引数として関数func1に渡すと、func1では「aと同じ内容のコピーb」が用意される
func1内でどれだけbを書き換えようが所詮コピーなのでfunc1を抜ければbは破棄されaにはなんら影響がない
a自体を書き換えさせたいならaの内容ではなくaの場所を教える必要がある
それを実現するのがポインタで上の例なら

void func1(int *b) {...}
void func2(void) {
int a = 100;
func1(&a);
}

となりキミの当初の質問にも同じことが言える
*が何個重なろうが理由は同じ