почему моя функция передачи указателя выдает мне неверный вывод?

#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;