【发布时间】:2017-11-09 05:02:02
【问题描述】:
我正在尝试一个问题,它要求我创建一个名为 randSwap 的函数,该函数接受 2 个 void 指针数组,并且有 50% 的机会在 2 个数组之间交换相同索引的 2 个值。下面是我的代码,但是每当我去编译时,它都会给我几个错误讨论:
警告:初始化使指针从整数而不进行强制转换。
void *array1[4] = {3,4,2,5};
还有其他几个与数组 1 和 2 相关的内容。
当我运行程序时,array1 的值被破坏,产生一个大的单个整数,并且 array 2 两次都打印它的原始值。
我对使用 void 类型非常不熟悉,因为我认为这就是问题所在。
#include <stdio.h>
int randSwap(void *array1[], void *array2[], int length)
{
static int numofswaps = 0;
int value;
int toswap;
void *temp;
value = rand() % 2;
if(value == 2)
{
toswap = rand() % length;
temp = array1[toswap];
array1[toswap] = array2[toswap];
array2[toswap] = temp;
numofswaps++;
}
return numofswaps;
}
int main(void)
{
int i;
void *array1[4] = {3,4,2,5};
void *array2[4] = {6,3,7,4};
int length = 4;
int numofswaps;
srand(time(NULL));
printf("Array1\n");
for(i=0; i<length; i++);
{
printf("%d\t", (int*)array1[i]);
}
printf("\nArray2\n");
for(i=0; i<length; i++)
{
printf("%d\t", (int*)array2[i]);
}
numofswaps = randSwap(array1, array2, length);
numofswaps = randSwap(array1, array2, length);
printf("\nArray1\n");
for(i=0; i<length; i++);
{
printf("%d\t", (int*)array1[i]);
}
printf("\nArray2\n");
for(i=0; i<length; i++)
{
printf("%d\t", (int*)array2[i]);
}
printf("\n");
return 0;
}
【问题讨论】:
-
在
main函数中声明例如array1作为指向void的指针数组,但您没有使用有效指针对其进行初始化?你真正想做什么?数组的目的是什么?为什么用int值而不是指针来初始化它们? -
*array1[4]是一个 指针数组 [其中 4 个],= {3,4,2,5};是对 4 个int值的初始化。 (int值不等于指针)。 -
问题要求我在函数 randSwap 中使用“空指针数组”作为参数。我不知道为什么......而且我不知道该怎么做。如果我只使用'array1 [4]',我会收到一个错误,上面写着'错误:array1 声明为空数组'。
-
@L.Kay 你需要决定你希望数组包含什么。如果元素是空指针,即
void *,那么它们必须包含某种类型的指针。问题是,指向什么?这是您必须回答的问题。 -
换句话说,声明
int array1 = {3,4,2,5}..,然后将数组作为void *传递给函数(然后您需要在取消引用之前强制转换函数——就像在qsort比较中一样函数)