2015-02-08 3 views
-2

Так что я хочу, чтобы исполняемый файл с тремя функциями:Возвращает динамический массив

Это будет пример:

float vec(int opt, int t) 
{ 
int i; 
float * v = new float[t]; 
// Do stuff with v 
return * v; 
} 
} 

Он получает аргументы OPT и т из основного. Затем основной должен получить v назад, чтобы использовать его в другой функции.

Каков наилучший способ для этого?

+7

Вместо этого используйте 'std :: vector'. Вы возвращаете один плавающий там. – Mat

+4

Прочтите хорошую [книгу] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list), чтобы изучить основы языка. –

+0

Какова релевантность трех функций? – juanchopanza

ответ

2

Обратный тип vec должен быть float *, а ваш оператор возврата должен быть return v. Выделение имен v с * просто дает вам первый элемент массива.

Замечу, что такой дизайн плохой. Он полагается на вызывающего абонента, чтобы освободить динамически выделенный массив. Было бы лучше, если бы вызывающий создавал массив и передавал его по ссылке vec, или vec возвращал другой контейнер статически. @Mat предложил std::vector; это, вероятно, хороший выбор.

У вас также есть дополнительные } в конце вашей функции. Избавиться от этого.

0

Ну, ваша подпись говорит, что функция возвращает один float, а не массив поплавков. Для того, чтобы ответить на ваш вопрос прямо ...

float *vec(int t) 
{ 
    float * v = new float[t]; 
    // Do stuff with v 
    return v; 
} 

Что это лучший способ сделать это?

Ну, это совсем другой вопрос. «Лучшим» способом было бы вернуть std::vector<float> и вообще избежать ручного управления памятью.

Смежные вопросы