Почему эта функция не увеличивает мою переменную в c? - PullRequest
0 голосов
/ 26 февраля 2019

Так что просто экспериментируйте с указателями на C.

void inc(int *p){
    ++(*p);
}

int main(){
    int x = 0;
    int *p;
    *p = x;
    inc(p);
    printf("x = %i",x);
}

Почему эта печать "x = 0" вместо "x = 1"?

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Поскольку вы не установили p на адрес x

Используйте

p = &x;

вместо

*p = x;

С *p = xВы вызываете неопределенное поведение, потому что p имеет неопределенное значение и указывает * где-то *.Но вы не знаете, куда он указывает, и *p = x записывает значение x в эту область памяти.

0 голосов
/ 26 февраля 2019

Вам необходимо назначить адрес x для p.Как уже упоминалось в других ответах, вы можете просто указать inc(&x);.Нет необходимости объявлять переменную и тратить ее таким образом.

0 голосов
/ 26 февраля 2019

Вот ваша ошибка:

*p = x;

Вы разыменовываете p, который не назначен, и присваивает ему текущее значение x.Таким образом, x не изменилось, потому что вы не передали указатель на x своей функции, и разыменование неинициализированного указателя вызывает неопределенное поведение .

Вместо этого вы хотите присвоить адрес x p:

p = &x;

В качестве альтернативы, вы можете полностью удалить p и просто передатьадрес от x до inc:

inc(&x);
...