我正在尝试学习数组指针 我想用下面的函数做到这一点:
int* ArrayManipulator(int* arrayPoiner, const int size)
反转数组列表:
#include <iostream>
using namespace std;
int* ArrayManipulator(int* arrayPoiner, const int size)
{
int i=0;
int tt[size];
for (i=0;i<=size;i++)
{
cout<<arrayPoiner[size-i]<<endl;
cout<<&arrayPoiner[size-i]<<endl;
tt[i]=arrayPoiner[size-i];
}
return tt;
}
int main()
{
int t[]={1,2};
int *ReversedArray;
ReversedArray = ArrayManipulator(t,1);
int i=0;
for (i=0;i<2;i++)
{
cout<< ReversedArray[i]<<endl;
}
return 0;
}
我在cout<< ReversedArray[i];
收到错误
cout<< &ReversedArray[i];
正在打印值的地址,但我无法打印值 - codeblocks错误
我希望最后两行是2和1,我在代码上出错了。
答案 0 :(得分:1)
您必须将指针返回到已在堆上分配的数组:
修改您的方法签名:
int** ArrayManipulator(int* arrayPoiner, const int size)
在堆上分配:
int **tt = new int*[size];
返回指向数组的指针;
return tt;
并修改您的通话,以便:
int **ReversedArray = ArrayManipulator(t,1);
并输出执行此操作:
cout<< *ReversedArray[i];
请勿忘记删除分配的空间:
delete [] ReversedArray;
答案 1 :(得分:1)
函数ArrayManipulator什么都不返回。所以程序已经有了未定义的行为。
我认为你想得到的是以下
#include <iostream>
using namespace std;
int * ArrayManipulator( const int *source, size_t n, int *dest )
{
dest = dest + n;
while ( n-- ) *--dest = *source++;
return dest;
}
int main()
{
const size_t N = 2;
int a[N] = { 1, 2 };
int b[N];
int * ReversedArray = ArrayManipulator( a, N, b );
for ( size_t i = 0; i < N; i++ )
{
cout << ReversedArray[i] << ' ';
}
cout << endl;
return 0;
}
考虑到标题std::reverse_copy
中声明的标准算法<algorithm>
执行类似的工作。如果你想反转一个阵列&#34;就位#34;那么你可以使用另一种标准算法std::reverse
。