указатель не обновляет значение, на которое он указывает внутри функции void - PullRequest
1 голос
/ 19 февраля 2020

Я сделал простую функцию, которая выполняет сложение и абсолютную разницу между параметрами, используя указатели, но когда я пытаюсь обновить указатель, указатель все еще имеет старое значение. почему это так или что я делаю не так:

#include <stdio.h>
#include <cstdlib> 

void update(int *a,int *b) {
int temp = *a;
int temp2 = *b;
int temp3 =0;
temp3 = temp + temp2;
printf("%d",temp3);
*b = abs(*a - *b);
 a = &temp3; // it is not updating
}

int main() {
    int a, b;
    int *pa = &a, *pb = &b;

    scanf("%d %d", &a, &b);
    update(pa, pb);
    printf("%d\n%d", a, b);

    return 0;
} 

указатель a не обновляется и все еще сохраняет свое старое значение внутри функции update

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

a - копия указателя, который был передан. В конце update, a теряется. Когда вы делаете это:

a = &temp3;

Вы изменяете значение a, но это не имеет значения, потому что a после этого все равно пропало. Вместо этого присвойте значение тому, куда оно указывает, так же, как вы делали с b:

*a = temp3;

Вы можете также использовать ссылки вместо указателей:

void update(int &a, int &b) {
    int temp = a;
    int temp2 = b;
    int temp3 = temp + temp2;
    printf("%d ", temp3);
    b = abs(a - b);
    a = temp3;
}

int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    update(a, b);
    printf("%d\n%d", a, b);
    return 0;
}
0 голосов
/ 19 февраля 2020

Простой ответ заключается в том, что в a = &temp3; вы назначаете адрес памяти параметра temp3, который, вероятно, находится в вызове стека функций, параметру *a функции, который также лежит в вызове стека функций.

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