Можно ли изменить содержимое адреса памяти возвращаемого значения функции? функции возвращают значение локальной переменной.
В следующем примере, скомпилированном для моей машины (x86-64) без предупреждений:
#include <stdio.h>
int get_val1()
{
int ret = 1;
return ret;
}
int get_val2()
{
int ret = 2;
return ret;
}
int get_val3()
{
int ret = 3;
return ret;
}
void redefine_ints(int *val1, int *val2, int *val3) {
*val1 = 10;
*val2 = 11;
*val3 = 12;
}
void print_and_redefine_ints(int val1, int val2, int val3) {
printf("val1 %d val2 %d val3 %d\n", val1, val2, val3);
redefine_ints(&val1, &val2, &val3);
printf("rval1 %d rval2 %d rval3 %d\n", val1, val2, val3);
}
int main()
{
print_and_redefine_ints(get_val1(), get_val2(), get_val3());
return 0;
}
Я получаю следующий вывод:
val1 1 val2 2 val3 3
rval1 10 rval2 11 rval3 12
Это ожидаемый результат, но как это возможно? Где хранятся эти переменные?