Я пытаюсь передать массив функции (* getcreditcurve). Я ожидаю, что функция (* getcreditcurve) вернет массив. Ожидается, что основная функция отправит несколько таких массивов в функцию (* getcreditcurve), ожидается, что функция указателя возвращает массив к основной функции для другого массива с использованием логики, указанной в функции указателя (* getcreditcurve). Я не получаю ошибку, но я не получаю правильное значение. Я ожидаю, что я + 1 будет 3 * 0,0039 = 0,0117 и I + 2 будет 4 * 0,0060 = 0,0024, однако я получаю следующее выходе первенствоватьНеожиданный возврат значения по переменной массива
'00D4F844 00D4F84C'
Даже если изменить оператор печати на
'print << *(I1+1) << '\t' << *(I2+2) << endl;'
я получаю следующее первенствует из положить
-9.26E+61 -9.26E+61
Может кто-нибудь помочь в беде стрельба пожалуйста? Извините, я просмотрел другой пост/вопрос на этом сайте, но не смог получить простейший способ решить эту проблему. Я собираюсь использовать эту логику для создания других проектов, чтобы упростить вопрос только для решения основной проблемы.
#include<iostream>
#include<cmath>
#include<fstream>
typedef double S1[5];
using namespace std;
double *getcreditcurve(double *);
int main()
{
S1 C1 = { 0.0029, 0.0039, 0.0046, 0.0052, 0.0057 };
S1 C2 = { 0.0020, 0.0050, 0.0060, 0.0070, 0.0080 };
typedef double *issuer;
issuer I1 = getcreditcurve(C1);
issuer I2 = getcreditcurve(C2);
ofstream print;
print.open("result1.xls");
print << (I1+1) << '\t' << (I2+2) << endl;
print.close();
return 0;
}
double *getcreditcurve(S1 ptr)
{
const int cp = 5;
typedef double curve[cp];
curve h;
h[0] = 2 * ptr[0];
h[1] = 3 * ptr[1];
h[2] = 4 * ptr[2];
h[3] = 5 * ptr[3];
h[4] = 6 * ptr[4];
return h;
}
http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope Массивы не копируются неявно. Это одна из причин, по которой они не очень удобны и должны быть заменены на 'std :: array'. –
[Объем и время жизни переменной] (http://stackoverflow.com/questions/11137516), кажется, почти дубликат ... сохранение указателя на переменную, которая вышла за рамки. –