Страницы

Поиск по вопросам

четверг, 4 апреля 2019 г.

Не изменяется значение указателя

void f(int *b) { b = new int; *b = 2; }
int main() {
int *a = NULL; f(a);
if (a == NULL) { std::cout << "mde"; }
return 0; }
Объясните, пожалуйста, почему в данном коде переменная a попрежнему осталась NULL? Ведь указатель - это адресс на область памяти. Изначально он никуда не указывает. Потом я передаю адресс на эту облась памяти и туда уже что-то записываю и она не изменяется. Объясните, пожалуйста, почему?


Ответ

Потому что вы передаете указатель a по значению, а не по ссылке. То есть, внутри функции f b - это копия указателя a. И то, что вы туда записываете новый адрес a никак не затрагивает.
Если вам нужно именно модифицировать a, сделайте так (вариант со ссылкой):
void f(int*&b) { b = new int; *b = 2; }
или так (вариант с указателем):
void f(int **b) { *b = new int; **b = 2; }
Во втором случае, вызов f надо поменять: не f(a); а f(&a);

Комментариев нет:

Отправить комментарий