C++ c+中的反向数组指针+;

C++ c+中的反向数组指针+;,c++,arrays,pointers,C++,Arrays,Pointers,我正在尝试学习使用数组的指针。 我想使用以下功能执行此操作: 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];

我正在尝试学习使用数组的指针。
我想使用以下功能执行此操作:

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;
}
#包括
使用名称空间std;
int*ArrayManipulator(int*arrayPoiner,const int size)
{
int i=0;
int tt[大小];

对于(i=0;i),必须返回指向已在堆上分配的数组的指针:

int **tt = new int*[size];
修改您的方法签名:

int** ArrayManipulator(int* arrayPoiner, const int size)
在堆上分配:

int **tt = new int*[size];
返回指向数组的指针

return tt;
并修改您的呼叫,以便:

int **ReversedArray = ArrayManipulator(t,1);
要做到这一点:

cout<< *ReversedArray[i];

函数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;
int*ArrayManipulator(常量int*source,大小n,int*dest)
{
dest=dest+n;
而(n--)*--dest=*source++;
返回目的地;
}
int main()
{
常数大小N=2;
int a[N]={1,2};
int b[N];
int*ReversedArray=阵列操纵器(a、N、b);
对于(大小i=0;icout错误是什么?您的问题是什么?您应该得到SEGV,tt应该在堆上,而且您还忘记了返回指针。
ArrayManipulator
返回指向堆栈上分配的数组的指针;这将调用未定义的行为。您还将数组的大小-1传递给您的函数,然后声明int tt[size]或tt[1],因此tt只有1个元素我为此绞尽脑汁-现在需要了解更多关于**指针的信息:(非常感谢您提供的时间和知识。您为什么要使用**?@Bob_uuuuOP在回答这个问题后对问题进行了一些修改。在原始版本中,他实际上使用了一个数组来指向指针。如果希望避免堆分配,这实际上是一个很好的解决方案。