首页 > 解决方案 > 为什么不进行交换?

问题描述

未交换

void f(struct a s)
{
    int t;
    for (int i = 0; i < 10; i++)
        for (int j = 0; j < 10; j++) {
            if (s.b[j] > s.b[j + 1]) {
                s.c = s.b[j];
                s.b[j] = s.b[j + 1];
                s.b[j + 1] = s.c;
            }
        }
}

输出是预期排列的,但和输入完全一样

标签: c++structreferencepass-by-referenceswap

解决方案


void f(struct a s)

s按值传递,它复制其内容。您需要通过引用或地址传递它来修改调用者的原始结构。

void f(struct a& s)

或者

void f(struct a* s)
...
f(&s);

推荐阅读