【发布时间】:2013-04-07 22:16:14
【问题描述】:
我正在编写一个交换二维数组元素的方法。我一直在寻找这个问题的答案,但是对于这种交换似乎没有很多好的答案。与传统交换的主要区别在于,我不是在尝试交换长度为 2 的数组之一中的整数,而是尝试交换一对长度为 2 的数组,更具体地说是它们的指针。我对 C 很陌生(试图从 Java 切换)。当我编译下面的代码时,我收到一个警告“赋值使指针从没有强制转换的整数”。任何帮助将不胜感激。提前致谢。
void swap(int array[][2], int indexA, int indexB)
{
int *temp = array[indexA];
*array[indexA] = array[indexB];
*array[indexB] = temp;
}
编辑:我还尝试了下面的代码来替换最后两行(不包括括号,但这导致编译器在从类型'int *分配给类型'int [2]'时给出错误“不兼容的类型” '" 对于每一行。
array[indexA] = array[indexB];
array[indexB] = temp;
编辑:数组声明如下,swap 函数作为快速排序实现的一部分被调用。调用 swap 方法的 sort 方法使用与我在 swap 中使用的相同类型的参数声明(即“int array[][2])。
int counts[256][2];
【问题讨论】:
-
这是一个 real 二维连续数组,我们是否正确? swap 的参数表明情况确实如此,但我要澄清一下。在任何一种情况下,对数组进行值交换都需要以一种或另一种方式移动内存,除非它被埋在结构中并且值分配会为您完成。如果可能的话,你能举一个例子来说明你是如何从调用者调用这个的吗?
-
不确定你所说的“真实”是什么意思,但我没有使用任何结构。
-
我的意思是你没有使用指针到指针的基础。 IE。
int **base;为您提供 2D 数组,而且您现在显然还没有发布您的调用方参数。 (这是一件好事。你的是一个真正的 2D 连续数组)。