Начиная со второго вопроса, вы можете использовать malloc для выделения памяти любого размера для любого типа переменной.Да, вы можете использовать malloc для распределения целых и других примитивных типов в куче.
int i_am_a_stack_variable = 1;
int * i_am_a_pointer_to_heap_memory = malloc(sizeof(int));
По первому вопросу, я думаю, вы неправильно понимаете, как работают возвращаемые переменные.Как правило, следует избегать использования глобальных переменных.Они, конечно, не нужны для возврата значений из функций.Возвращаемое значение функции копируется из кадра стека функции обратно в кадр вызывающего стека, где бы она ни была назначена.Обратите внимание, что это КОПИРОВАНИЕ назад.Будь то примитивный тип или указатель (который на самом деле является просто еще одним типом примитива).Ваш код может быть написан просто без использования указателей.Также обратите внимание, что ваш код вообще не использовал глобальную переменную, даже если вы упомянули глобальные переменные.
#include <math.h>
#include <stdio.h>
int sum();
int main()
{
int num;
num = sum();
printf("\nSum of two given values = %d", num);
return 0;
}
int sum()
{
int a = 50, b = 80;
int sum = 0;
printf("%d %d",a,b);
sum = a+b;
return sum;
}
Имеет ли это смысл?