Вы ищете один из двух вариантов здесь.Вы можете либо выделить указатель памяти из уравнения и передать адрес памяти стандартной переменной:
void setup(int* helo)
{
*helo = 8;
}
int main(int argc, char* argv[]) {
int helo = 0;
setup(helo);
printf("Value: %d\n", helo);
getchar();
return 0;
}
Или, если вы хотите придерживаться своего подхода, подпись вашей функции должна измениться , чтобы получить указатель на указатель:
void setup(int** helo) {
*helo = (int*) malloc(sizeof(int));
*(*helo) = 8;
}
int main(int argc, char* argv[]) {
int* helo = NULL;
setup(&helo);
printf("Value: %d \n", (*helo));
getchar();
return 0;
}
Причина этого в том, что setup(int* helo)
получает копию из int* helo
объявлено в main()
, и эта локальная копия будет указывать на то же место.Поэтому, что бы вы ни делали с helo
внутри setup()
, вы будете изменять локальную копию переменной, а не helo
с main()
.Вот почему вам нужно изменить подпись на setup(int** helo)
.