포인터를 함수에서 반환하면 해당 값을 개별적으로 액세스 할 수 있습니다. 그러나 루프가 포인터 변수의 값을 출력하는 데 사용되면 잘못된 값이 표시됩니다. 내가 실수하고있는 곳에서는 그것을 알아낼 수 없습니다.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 스타일 배열을 사용하지 않는다는 것을 의미합니다 (하지만 일반적으로 좋은 추천입니다). –