#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
inaddition
не влияет наc
inmain
, другими словами,c
inmain
остается неинициализированным.2. @KeineLust Он присваивает
int
int *
3. @machine_1, да, вот почему я говорю, что
c
inmain
остается неинициализированным, чтобы изменить значениеc
inmain
, вам нужно разыменовать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.