【C 語言入門】157.兩個變數的排序 (使用函式)

上一篇入門文章中,我們使用指標傳 a 和 b 的位址傳到 swap 函式,將 a 和 b 交換。

#include <stdio.h>
void swap(int *, int *);

int main()
{
    int a = 3, b = 5;
    swap(&a,&b);
    
    printf("a: %d\n", a);
    printf("b: %d\n", b);

    return 0;
}

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

這次我們增加一個判斷式,如果 a 大於 b,我們才做交換。

#include <stdio.h>
void swap(int *, int *);

int main()
{
    int a = 5, b = 3;
    if (a > b){
        swap(&a, &b);
    }

    printf("a: %d\n", a);
    printf("b: %d\n", b);

    return 0;
}

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

把 sort 搬出去。

#include <stdio.h>
void sort(int, int);
void swap(int *, int *);

int main()
{
    int a = 5, b = 3;
    sort(a,b);
    printf("a: %d\n", a);
    printf("b: %d\n", b);

    return 0;
}

void sort(int a, int b){
    if (a > b){
        swap(&a, &b);
    }
}

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

輸出結果

a: 5

b: 3

更改後

#include <stdio.h>
void sort(int *, int *);
void swap(int *, int *);

int main()
{
    int a = 5, b = 3;
    sort(&a,&b);
    printf("a: %d\n", a);
    printf("b: %d\n", b);

    return 0;
}

void sort(int *a, int *b){
    if (*a > *b){
        swap(&*a, &*b);
    }
}

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

輸出結果

a: 3

b: 5

傳到 sort 和 swap 的都是位址的複製。

sort function 中呼叫的 swap ,傳的是位址的變數。

因此我們也可以簡化 &*a 成 a,如下。

#include <stdio.h>
void sort(int *, int *);
void swap(int *, int *);

int main()
{
    int a = 5, b = 3;
    sort(&a,&b);
    printf("a: %d\n", a);
    printf("b: %d\n", b);

    return 0;
}

void sort(int *a, int *b){
    if (*a > *b){
        swap(a, b);
    }
}

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

Leave a Comment

Your email address will not be published. Required fields are marked *