Когда я возвращаю указатель из функции, ее значение можно получить по отдельности. Но когда цикл используется для вывода значения этой переменной указателя, отображается неправильное значение. Где я ошибаюсь, не могу понять.Возвращаемый указатель из функции в C++
#include <iostream>
#include <conio.h>
int *cal(int *, int*);
using namespace std;
int main()
{
int a[]={5,6,7,8,9};
int b[]={0,3,5,2,1};
int *c;
c=cal(a,b);
//Wrong outpur here
/*for(int i=0;i<5;i++)
{
cout<<*(c+i);
}*/
//Correct output here
cout<<*(c+0);
cout<<*(c+1);
cout<<*(c+2);
cout<<*(c+3);
cout<<*(c+4);
return 0;
}
int *cal(int *d, int *e)
{
int k[5];
for(int j=0;j<5;j++)
{
*(k+j)=*(d+j)-*(e+j);
}
return k;
}
Включите предупреждения своего компилятора, а затем прочитайте их. –
Есть очень мало, если таковые имеются, случаи, когда вам нужно вернуть указатель из функции. По моему опыту, необходимость возврата указателя чаще всего возникает из-за неправильного дизайна программы. Чаще всего вы возвращаете результат через один из параметров и позволяете вызывающему абоненту беспокоиться о том, где распределять данные. – Lundin
@ Lundin С несколькими заметными исключениями (например, функции поиска, которые могут завершиться неудачей). С другой стороны, возврат через один из параметров следует использовать только в случае крайней необходимости, когда профайлер говорит, что у вас нет выбора. В большинстве случаев правильным решением является возврат по значению. Что, конечно, означает не использование массивов стилей C (но это хорошая рекомендация в целом). –