【发布时间】:2010-08-03 04:09:08
【问题描述】:
我有两个需要交换的指针数组。与其仅仅复制数组中的数据,不如交换指向数组的指针更有效。我一直认为数组名称本质上只是指针,但以下代码收到编译器错误:
double left[] = {1,2,3};
double right[] = {9,8,7};
double * swap = left;
left = right; // Error "ISO C++ forbids assignment of arrays"
right = swap; // Error "incompatible types in assignment of `double*' to `double[((unsigned int)((int)numParameters))]'"
动态创建数组可以解决问题,但无法在我的应用程序中完成。我该如何完成这项工作?
【问题讨论】:
-
数组名不是指针。数组名是其第一个元素的地址。
-
而指针是指向变量的地址。为什么我不能交换这些地址?
-
@thornate:数组名和指针变量之间最相关的区别是数组名不是左值,因此它不能成为赋值语句的目标。因此,做你想做的事情的方法是将数组名称分配给指针变量,是左值,然后交换它们。一旦定义了“左”或“右”,就无法让它们指向其他任何东西。
-
@thornate 指针的 值 是变量的地址。指针名称本身并不像数组那样表示地址(您必须使用运算符
&来获取指针的地址)。在指针分配期间,一个指针的 值 被获取并分配给另一个指针。您不能在数组上这样做,因为根据语言概念,它们表示地址本身。据此,您正在尝试做类似0x23ff10 = 0x23ff44的事情,假设左边是0x23ff10,右边是0x23ff44。 -
@thornate:“我有两个指向双精度的指针数组”???在哪里?您的代码中没有任何“指针数组”。