您的代码正在尝试对两个元素数组进行赋值,这是不允许的(对于两个元素数组或任何其他重要的长度),除非它们被埋在结构中。
要移动数据,您有多种选择。保留现有原型,您可以执行以下操作:
void swap(int array[][2], int indexA, int indexB)
{
int temp[2];
memcpy(temp, array[indexA], sizeof(temp));
memcpy(array[indexA], array[indexB], sizeof(array[indexA]));
memcpy(array[indexB], temp, array[indexB]);
}
或者,您可以使用元素循环:
void swap(int array[][2], int indexA, int indexB)
{
for (size_t i=0;sizeof(array[0])/sizeof(array[0][0]);++i)
{
int temp = array[indexA][i];
array[indexA][i] = array[indexB][i];
array[indexB][i] = temp;
}
}
最后,您还可以考虑使用以下内容:
void swap(int (*a)[2], int (*b)[2])
{
int temp[sizeof(*a)/sizeof((*a)[0])];
memcpy(temp,a,sizeof(temp));
memcpy(a,b,sizeof(*a));
memcpy(b,temp,sizeof(*b));
}
并像这样在调用方调用它:
swap(counts[indexA], counts[indexB]);
恕我直言,这更具可读性。示例如下:
#include <stdio.h>
#include <stdlib.h>
void swap(int (*a)[2], int (*b)[2])
{
int temp[sizeof(*a)/sizeof((*a)[0])];
memcpy(temp,a,sizeof(temp));
memcpy(a,b,sizeof(*a));
memcpy(b,temp,sizeof(*b));
}
int main(int argc, char *argv[])
{
int counts[10][2];
int indexA = 1, indexB = 2;
counts[indexA][0] = counts[indexA][1] = 1;
counts[indexB][0] = counts[indexB][1] = 2;
swap(counts[indexA], counts[indexB]);
// better be 2 2
printf("%d %d\n", counts[indexA][0], counts[indexA][1]);
return 0;
}
输出
2 2