【问题标题】:How to swap between array and pointer c++如何在数组和指针c ++之间交换
【发布时间】:2012-04-01 07:49:45
【问题描述】:

我正在尝试在 C++ 中的数组和指针之间交换

我的代码如下:

void foo(int* a, int* b);
void main()
{
  int *a = NULL;
  int b[6]={2,3,5,6};
  foo(a,b);
}

void foo(int* a, int b[])
{
  int * c;
  c=a;
  a=b;
  b=c;
}

当我从方法中返回时,没有任何改变,

在方法中一切正常,但是当方法返回时没有任何变化。

我的问题是:

A) 我的错误是什么? B)我应该如何解决它。

【问题讨论】:

  • 如果你的书或教授教你void main(),是时候换一个那个了。

标签: c++ pointers swap


【解决方案1】:

你的错误是你假设数组是指针。他们不是。它们可以衰减为指针。

您无法更改b,但您可以更改a,通过引用传递它:

void foo(int*& a, int b[])
{
  int * c;
  c=a;
  a=b;
}

【讨论】:

    【解决方案2】:

    在您的示例中,分配了b。但是您不能将数组的这种“正在分配”属性转移到指针。您可以分配一个指针(通过使用mallocnew),但您不能取消分配一个数组。所以恐怕你想做的事情是不可能的。

    如果您只想交换ab 的内容,您将不得不这样做(物理地复制每个值,或者一次复制整个数组的memcpy),但是您不能简单地更改数组,使其地址更改为a

    (必填:既然你标记了你的问题c++,你应该使用向量。)

    【讨论】:

      最近更新 更多