При возвращения указателя возвращает 0 [закрыт]

125
11 октября 2019, 03:30

Столкнулся с такой проблемой, после выполнения функции возвращаю указатель (который в функции имеет значение!!!). В результате в main возвращает 0. Почему?

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
float* fun(int  n, float* result){
    float x=0;
    float res=0;
    for(int a=0;a<n;a++){
        if(a%2==0)
           x=pow(a,2);
        else
            x=(a-1)*a;
        float sq = sqrt(x);
        res=res+sq;
    }
    result=&res;
    return result;
}
int main(){
    int  n=20; 
    float *result;
    printf("%f",result);
    printf("\n");
    result=fun(n,result); 
    printf("%f", result);
}`
Answer 1

Вы возвращаете указатель на локальную переменную, которой после возврата из функции просто нет. И куда указывает этот указатель - Бог весть...

И компилятор должен был вас об этом предупредить.

И, кстати, выводить указатель как значение - неверно:

float *result;
printf("%f",result);  <-- раз здесь %f, передавать нужно
                          значение float, а не указатель на него

Если бы вы сразу задавали правильно вопрос...

void fun(int  n, float* result)
{
    ...
    *result=res;
}
int main()
{
    int  n=20;
    float result;
    fun(n,&result);
    printf("%f", result);
}

Вам надо что-то типа этого.

READ ALSO
Как создать двумерный вектор в куче? [закрыт]

Как создать двумерный вектор в куче? [закрыт]

Нужен двумерный динамический вектор, который можно будет удалить в любой момент

126
Почему в этом коде используется throw?

Почему в этом коде используется throw?

В этом коде я получаю число, которое ввел в EditText, и если оно пустое то выбрасывается исключениеТак вот почему именно нужно выбросить исключение

143
Сериализовать данные из JTable

Сериализовать данные из JTable

Хочу сохранить данные из таблицы JTable и, соответственно, восстановить их при новом запуске программыВ коде инициализирована таблица table

123