関数からポインタを返すと、その値に個別にアクセスできます。しかし、そのポインタ変数の値を出力するためにループが使用されると、間違った値が表示されます。私が間違っているところでは、それを理解することはできません。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;
}
コンパイラの警告を有効にしてから、それらを読み取ります。 –
関数からポインタを返す必要があるケースはごくわずかです。私の経験上、ポインターを返す必要性は、欠陥のあるプログラムの設計に起因することが最も多いです。ほとんどの場合、結果をパラメータの1つに戻して、呼び出し側がデータをどこに割り当てるか心配する必要があります。 – Lundin
@ Lundinいくつかの注目すべき例外(たとえば、失敗する可能性のある検索機能)があります。一方、パラメータの1つを返すことは、プロファイラがあなたに選択肢がないと言ったときに、絶対に必要なときにのみ使用するべきです。ほとんどの場合、正しい解決策は価値によって戻ることです。もちろん、Cスタイルの配列を使用しないことを意味します(しかし、これは一般的にお勧めです)。 –