微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我想知道为什么这不一样函数定义外主函数,如果主函数内

如何解决我想知道为什么这不一样函数定义外主函数,如果主函数内

#include <stdio.h>

int generator(int n) {
    int ten[6]; // array that saves digit number
    int result = n; 
    for (int i = 0; i < 6; i++) {

        ten[i] = n % 10; //saving digit number
        n = n / 10;
        result += ten[i];
    }
    return result;
 }
void sort(int x,int y) { //the problem function. it didn't work
if (x > y) {
    int temp;
    temp = y;
    y = x;
    x = temp;
}


int main(void) {
    int number[10000];
    int selfNumber[10000];
    int result[10000];


    for (int i = 0; i < 100; i++) {
        number[i] = generator(i+1); //generator function
    }
    for (int i = 0; i < 100; i++) {
        printf("%d\n",number[i]);
    }
    for (int i = 0; i < 100; i++) {
        if (number[i] > number[i + 1]) { //it worked.
            int temp;
            temp = number[i + 1];
            number[i+1] = number[i];
            number[i]=temp;
        }
        sort(number[i],number[i + 1]);
     }
    for (int i = 0; i < 100; i++) {
        printf("%d\n",number[i]);
    }
    return 0;

我定义了 void 函数 sort 来按大小对数字进行排序。但它没有用。 所以,我在 main 函数中使用了 if 来按大小对数字进行排序。 我不知道为什么它的工作方式有所不同。

解决方法

您的 sort 函数按值接受参数(按值传递),即它使用您传递给它的数字的副本。 sort 交换复制成功,但这不是您期望的行为。

当需要传递引用语义时使用指针(或 C++ 中的引用):

void sort(int* x,int* y) {
  if (*x > *y) {
    int temp = *y;
    *y = *x;
    *x = temp;
  }
}

阅读有关指针 here 的更多信息。

,

您将 x & y 按值传递给 sort 函数,因此当您返回时,任何更改都会丢失。您可能希望改为传递指针:

void sort(int *x,int *y) {
    if (*x > *y) {
        int temp;
        temp = *y;
        *y = *x;
        *x = temp;
    }
}

这将导致更改原始值,而不仅仅是本地副本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。