【问题标题】:Swap function returning a number that is not in my array交换函数返回一个不在我的数组中的数字
【发布时间】:2015-07-07 00:12:33
【问题描述】:

我正在使用 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

解决办法是什么?

【问题讨论】:

  • 请提供完整代码
  • 您需要提前结束内循环一个元素,因为您在其中引用了values[j+1]。您的最后一次迭代现在访问数组末尾之后的一个元素。

标签: c arrays pointers swap


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,由于某种原因,我尝试了for(j = 0; j &lt; (sizeof(values)/sizeof(values[0]) - sizeof(values[0]); j++){ 我对 C 还不是很熟悉,所以要掌握这一切。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多