如何在数组和指针c ++之间进行交换

时间:2012-04-01 07:49:45

标签: c++ pointers swap

我正在尝试在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)我该如何解决它。

2 个答案:

答案 0 :(得分:7)

你的错误是假设数组是指针。他们不是。他们可以腐烂到指针。

您无法更改b,但可以通过引用将其更改为a

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

答案 1 :(得分:0)

在您的示例中,分配了b。但是您无法将数组的“正在分配”属性传递给指针。您可以分配指针(使用mallocnew),但不能取消分配数组。所以我担心你想做的事情是不可能的。

如果你要做的只是交换ab的内容,你就必须这么做(实际复制每个值,或memcpy为整个数组一次),但你不能简单地改变数组,使其地址变为a的地址。

(强制性评论:既然您标记了问题c++,就应该使用向量。)