【发布时间】:2014-01-15 03:27:37
【问题描述】:
我正在准备 C++ 考试,我对过去的试卷有疑问
"用 C++ 编写一个函数,将一个双精度数组和数组长度作为输入,并返回一个两倍长度的数组。返回数组的前半部分应包含原始数组内容的副本. 返回数组的后半部分应包含原始数组的内容,以相反的顺序排列。"
"该函数应具有以下原型:double *copy_and_reverse(double *a, int length);"
因为我显然是 C++ 新手,所以我陷入了我的解决方案中,到目前为止我的代码是:
double *copy_and_reverse(double *a, int length){
double *b[length*2];
for(int i=0;i<length;i++){
*b[i]=a[i];
}
for(int i=length;i<length*2;i++){
int w=length-1;
*b[i]=a[w];
w--;
}
return *b;
}
int main()
{
double nums[2]={1.23,5.364};
double *pnums=nums;
*pnums=*copy_and_reverse(pnums, 2);
我认为我的方法的核心是正确的,但我只是停留在使用指针的语法中,感谢任何帮助,如果可能的话,请提供其背后的推理,以便我可以为考试学习。
【问题讨论】:
-
您取消引用
b的元素而不为它们分配内存。 -
每次使用
b以及分配pnums时都会不必要地取消引用。查找有关指针使用的教程,主要是解引用的用途。此外,您的b数组将在您的函数返回时被销毁,您应该动态分配它。 -
查找dynamic memory allocation。这就是你想要使用的。
-
先说你的教授是个白痴。原型
copy_and_reverse(double *a, int length);不采用数组,它采用指向数组中第一个元素的指针。 -
要继续,您是否收到编译器错误?您究竟需要什么帮助?