значение указателя в main (), я получаю правильный вывод в функции

#c

#c

Вопрос:

Ниже приведен код, в котором я получаю адрес c в main () вместо значения:

 int addtion(int *a, int *b, int *c) {
    c = *a   *b;
    printf("sum is :%dn", c);
}

int main() {
    int a = 10;
    int b = 10;
    int c;
    addtion(amp;a, amp;b, amp;c);
    printf("%dn", c);
}
  

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

1. Вы уверены, что получаете правильный вывод? присвоение 20 c in addition не влияет на c in main , другими словами, c in main остается неинициализированным.

2. @KeineLust Он присваивает int int *

3. @machine_1, да, вот почему я говорю, что c in main остается неинициализированным, чтобы изменить значение c in main , вам нужно разыменовать c внутри addition

4. Вы получали какие-либо предупреждения компилятора?

5. Ваш вопрос неясен, но если вы имеете в виду, почему работает ваш первый printf, то ответ заключается в том, что на многих машинах указатели и целые числа имеют одинаковый размер, поэтому вы присваиваете указателю целое число, а затем заставляете printf печатать его как целое число, и это вроде как работает.

Ответ №1:

Вам не нужно передавать адреса a и b , потому что их значения не должны изменяться, а только использоваться. Вам нужно отменить ссылку c внутри вашей addtion функции, чтобы сохранить значение addition к тому, на что оно указывает:

 #include <stdio.h>

void addtion(int a, int b, int *c) {
    *c = a   b;
    printf("sum is :%dn", *c);
}

int main() {
    int a = 10;
    int b = 10;
    int c;
    addtion(a, b, amp;c);
    printf("%dn", c);
}
  

В качестве последнего замечания, ваша addition функция, похоже, не возвращает никакого значения, поэтому рассмотрите возможность использования void вместо этого.

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

1. Да, вы правы в том, что до тех пор, пока нам не понадобится изменять значение для фактических параметров, мы не должны отправлять адрес фактических параметров. И в моей программе я не отменял ссылку на указатель c, поэтому я не смог получить значение в main (). Но есть ли что-то неправильное, если я отправляю адреса a и b и отменяю ссылку в addtion () funcn.