好的,我所指的代码如下所示.它不是整个代码,但它是相关的部分
void
array_sort(void *A, int arr_size, int comparison(void *, void*)) {
void *max = A;
int i;
for (i = 0; i < arr_size; i++) {
if (comparison(A + i, max) == -1) {
max = A + i;
}
}
}
int
num_ascending(void *n1, void *n2) {
double v1 = *((double *) n1), v2 = *((double *) n2);
if (v1 > v2) {
return -1;
} else if (v1 < v2) {
return 1;
}
return 0;
}
函数的意图并不重要,我已经删除了不相关的部分,但问题区域在上面.我的问题是,用户使用Double数组调用arraySort,并使用num_ascending作为比较函数.问题是,当调用if语句并将地址A+i和max传递给比较函数时,如果i大于0,则A+i位置的值始终更改为0,而不管原始数组A[]有多大.
问题是,我使用了一系列的打印语句来跟踪呼叫.在比较调用之前,A+1处的值是1.00,在num_ascending()调用中,它立即读作0.00.我验证了我们正在传递的空指针没有更改,因为在地址中确实可以完美地传递,但该地址的值刚刚变为0.它没有为空虚*最大.我只是完全不确定为什么会发生这样的事情.如有任何帮助,将不胜感激!