Проблемы в назначении адресов - PullRequest
2 голосов
/ 22 марта 2012

В этом коде C я попытался присвоить адреса указателей одной переменной другой с некоторыми изменениями, а затем снова обратно.

#include<stdio.h>
void change(int *x)
{
    int *z;
    z=x+5;
    printf("%u\n",z);
    x=z;
    printf("%u\n",x);
}
int main()
{
    int *p;
    int y=2;
    p=&y;
    printf("%u\n",p);
    change(p);
    printf("%u\n",p);
    return 0;
}

Вывод:

2280640
2280660
2280660
2280640

Может кто-нибудьобъясните, пожалуйста, почему последняя строка вывода 2280640. Я думаю, что это должно быть 2280660.

1 Ответ

7 голосов
/ 22 марта 2012

Вы передаете указатель по значению .Копия указателя p передается в функцию change(), а не сам указатель p.

Чтобы иметь возможность изменять p внутри функции, вам нужно будет передать ее по ссылке .

void change(int **x) 

и вызвать ее как

 change(&p);

и внутри change выполните назначение как

 *x = z;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...