c ++

时间:2015-12-08 23:26:24

标签: 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];
    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错误

编辑代码: enter image description here

我希望最后两行是2和1,我在代码上出错了。

2 个答案:

答案 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