【问题标题】:I want to know why this don't work the same(function definition outside-main and if inside-main function)我想知道为什么这不起作用(函数定义外部主函数和内部主函数)
【发布时间】:2021-09-16 16:57:51
【问题描述】:
#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 对数字进行大小排序。 我不知道为什么它的工作方式不同。

【问题讨论】:

    标签: c sorting if-statement main self


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 哦....我忘了...感谢您提醒我有关传递引用的信息
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      相关资源
      最近更新 更多