#c #pointers
Вопрос:
приведено следующее
#include lt;stdio.hgt; void func2 (int num, int *result); int main() { int num, result; printf("Enter a number: n"); scanf("%d", amp;num); func2(num, amp;result); printf("func2(): %dn", result); return 0; } void func2(int num, int *result) { //key in code }
в пустом func2 я написал
int i=0; result=amp;i; while (num!=0) { i =((num)*(num)); num=num/10; }
но программирование неправильно возвращает значение переменной i. что не так с моим назначением переменной?
ожидаемый результат:
Enter a number: 24 (user enter) func2(): 20
фактический объем производства:
Enter a number: 24 (user enter) func2(): 32767
Комментарии:
1. Psudo-код для
func2
никогда не сохраняется*result
, поэтому любые результаты, которые выдает ir, будут недоступны для вызывающего.2. Также
num
является неинициализированным.3. добавлены ожидаемые и фактические выходные данные.
4. Вам нужно это сделать
*result = something
, чтобы изменить переменнуюmain()
.5. Если вы переназначите
result
, у вас больше не будет указателя на переменную вызывающего абонента.
Ответ №1:
Вам нужно назначить косвенно через result
, а не устанавливать result
адрес другой переменной.
int i=0; while (num!=0) { i =((num)*(num)); num=num/10; } *result = i;