두 벡터의 내적을 수행 한 다음 결과를 표시해야합니다. 내가 배운 것을 보면, C++로 할 수있는 최선의 결과는 결과 벡터 (포인터)의 주소를 반환한다는 것입니다.다른 함수에서 반환 된 배열 포인터 사용
// Dot product.
double * dot(double u[3], double v[3]) {
double result[3];
result[0] = u[0] * v[0];
result[1] = u[1] * v[1];
result[2] = u[2] * v[2];
return result;
그때 결과를 인쇄해야, 그래서 포인터를 받아 다른 함수가 있습니다 : 나는 현재이 코드를 사용하는 것이 일을 오전이 작동하지 않습니다
void pvec(double * ptr) {
cout << "[" << *(ptr + 0) <<", " << *(ptr + 1) << ", " << *(ptr + 2) << "]\n";
}
합니다. 결과 값은 모두 가비지입니다.
어떻게하면됩니까? 파이썬에서 왔을 때, 나는 팔이나 다리가없는 것과 같은 기능을 통해 배열을 전달할 수없는 것 같았고 포인터 게임을 제대로 할 수 없었습니다.
void dot(double u[3], double v[3], double result[3])
과에 코드의 나머지 부분을 조정합니다
함수'dot'는 로컬 객체에 대한 포인터를 반환합니다. 참조 해제 될 때 동작은 정의되지 않습니다. –
게다가, ** 포인터 게임을하지 **. C++ 방식으로 일을하십시오. –
결과를 정적'static double result [3];로 만들거나'double * result = new double [3];을 동적으로 (better) 할당하고'delete [] ptr'가 필요 없다면 해제 할 수 있습니다. 라이브 데모는 https://ideone.com/FU8L0I를 참조하십시오. – kwarnke