【问题标题】:How can i actuate swap func in loop?如何在循环中启动交换功能?
【发布时间】:2021-12-28 11:32:12
【问题描述】:
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4 - i; j++) {
        if (array[j] > array[j + 1]) {
            swap(array[j], array[j + 1]);
        }
    }
}

printf("Descending : ");
for (int k = 4; 0 <= k; k--) {
    printf("%d ", array[k]);
}

我为五个键入的整数编写了降序代码。 有两种方法可以激活它。 第一个是在循环中使用临时交换(如tmp=a, a=b, b=tmp),第二个是声明交换函数(void swap(int x, int y){int tmp=x, x=y, y=tmp})并在循环中使用这个函数。 第一种方法成功了,第二种方法失败了。

我想知道为什么swap func in loop无法启动。

【问题讨论】:

  • 更改函数以接受数组和索引:swap(array, j, j+1); 否则,您只是交换值的副本。更多信息,请搜索“c pass by value”

标签: c for-loop if-statement swap function-definition


【解决方案1】:

我编写了五个输入实数的降序代码。

考虑到提供的代码(在调用 prinf 时使用的转换说明符 %d),您的意思似乎是整数而不是实数。

您需要通过指向它们的指针间接引用将交换的对象传递给函数。否则该函数将处理原始对象的值的副本..

函数可以通过以下方式声明和定义,例如

void swap( int *a, int *b )
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

可以这样称呼

swap( array + j, array + j + 1 );

swap( &array[j], &array[j + 1] );

【讨论】:

    猜你喜欢
    • 2015-03-18
    • 1970-01-01
    • 2013-09-09
    • 2017-02-22
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 2021-03-14
    相关资源
    最近更新 更多