1
试图写这个程序有点有趣,但它给了我一些主要的悲伤。如果我只是抛弃我的功能一例,一切都可以正常工作,但是当我一次移动到两个以上的案例时,他们就开始从对方那里获取价值。第一个函数使用第二个函数的第一个元素(在排序之前)将其最后一个元素(排序后)交换。阵列考虑对方的价值观?
示例:valuesOne和valuesTwo应分别为[3,5,9,27,31]和[1,1,5,6,18,102]。但最终分别为[1,3,5,9,27]和[1,5,6,18,31,102]。谁能帮我这个?我觉得这可能是我的指针问题,但我现在才刚刚开始学习。
CODE:
#include <stdio.h>
int doubleMedian(int *values, int numValues);
int main() {
int valuesOne[5] = {5, 31, 3, 9, 27};
int valuesTwo[6] = {1, 6, 18, 1, 102, 5};
int resultOne = doubleMedian(valuesOne, 5);
int resultTwo = doubleMedian(valuesTwo, 6);
printf("Double medians are %d and %d", resultOne, resultTwo);
}
int doubleMedian(int *values, int numValues) {
int temp = 0, pass = 0, medianNum = 0, median = 0;
printf("Before sort:\t");
for(int x = 0; x < numValues; x++) {
printf("%d, ", values[x]);
}
printf("\n");
while(pass < numValues) {
for(int x = 0; x < numValues; x++) {
if(values[x] > values[x + 1]) {
temp = values[x];
values[x] = values[x + 1];
values[x + 1] = temp;
}
}
pass++;
}
printf("After sort:\t");
for(int x = 0; x < numValues; x++) {
printf("%d, ", values[x]);
}
if(numValues % 2 == 0) {
medianNum = (numValues/2) - 1;
median = values[medianNum + 1] + values[medianNum];
} else {
medianNum = (numValues/2) - 1;
median = values[medianNum] * 2;
}
printf("\n\n");
return median;
}
感谢堆,不会说谎,这不是我今晚第一次犯一个愚蠢的错误,哈哈。干杯! 编辑:好的解释也是如此。 – jcockle2 2014-10-16 12:38:50
正如@dasblinkenlight所说的,你来过array1的内存地址并读取数组2的值。因为两个数组都放在彼此后面的堆栈中。所以你从array2的内存中读取;) – andreashager 2014-10-16 12:40:02