gpt4 book ai didi

c - 交换函数返回一个不在我的数组中的数字

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:41 27 4
gpt4 key购买 nike

我正在用 C 编写一个小的冒泡排序程序。我使用交换函数和指针来完成我的任务,我的程序运行良好。但是,我有一个问题。我的程序返回 0(不在数组中)并且不返回 9。我很困惑。

我的数组是:int values[] = {7, 3, 9, 4, 6, 1, 2, 8, 5};

我的两个功能是:

void sort(){
int i;
int j;
for(i = 0; i < (sizeof(values)/sizeof(values[0])); i++)
{
for(j = 0; j < (sizeof(values)/sizeof(values[0])); j++)
{
if(values[j] > values[j + 1]){
swap(&values[j], &values[j + 1]);
}
}
}
}// end sort

void swap(int* i, int* j){
int x = *i;
*i = *j;
*j = x;
}//end swap

最后,在运行我的程序后我得到:

Before:
7 3 9 4 6 1 2 8 5
After:
0 1 2 3 4 5 6 7 8

解决方案是什么?

最佳答案

您的交换函数很好...问题是您在内部 for 循环中访问了数组边界之外的内容。在该循环中,j 的范围从 0 到最后一个数组索引,因此 values[j] 最多是数组的最后一个元素...但是,你一次处理两个元素,values[j]values[j+1]...迭代,values[j+1] 超出范围。

解决方案只是提前停止你的内部循环一次迭代,即:

    for(j = 0; j < (sizeof(values)/sizeof(values[0]) - 1); j++){

关于c - 交换函数返回一个不在我的数组中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com