我正在尝试在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)我该如何解决它。
答案 0 :(得分:7)
你的错误是假设数组是指针。他们不是。他们可以腐烂到指针。
您无法更改b
,但可以通过引用将其更改为a
:
void foo(int*& a, int b[])
{
int * c;
c=a;
a=b;
}
答案 1 :(得分:0)
在您的示例中,分配了b
。但是您无法将数组的“正在分配”属性传递给指针。您可以分配指针(使用malloc
或new
),但不能取消分配数组。所以我担心你想做的事情是不可能的。
如果你要做的只是交换a
和b
的内容,你就必须这么做(实际复制每个值,或memcpy
为整个数组一次),但你不能简单地改变数组,使其地址变为a
的地址。
(强制性评论:既然您标记了问题c++
,就应该使用向量。)