C Primer Plus 第9章 函數 9.6 改變函數中的變量

有時咱們須要用一個函數改變另外一個函數中的變量。例如,排序問題的一個常見任務是交換兩個變量的數值。假設要交換兩個變量x和y的數值:
    x=y;
    y=x;
    上面這段簡單的代碼並不能實現這個功能,由於當執行第二行時,x的原數值已經被y的原數值所代替。這就須要另一行語句對x的原數值進行存儲。
    temp=x;
    x=y;
    y=temp;
    如今這段代碼就能夠實現數值交換的功能,能夠將其編寫成一個函數並構造一個驅動程序進行測試。在程序清單9.13中,爲了清楚的代表某變量屬於函數main()仍是屬於函數interchange(),前者使用了變量x和y,後者使用的是u和v。
    程序清單 9.13 swap1.c程序
    /*swap1.c  交換函數的第一個版本*/
  函數

#include <stdio.h>
    void interchange(int u,int v); /*聲明函數*/
    int main(void)
    {
        int x=5,y=10;
        printf("Originally x = %d and y = %d.\n",x,y);
        interchange(x,y);
        printf("Now x = %d and y = %d.\n",x,y);
        return 0;
    }
    
    void interchange(int u,int v)
    {
        int temp;
        temp = u;
        u = v;
        v = temp;
    }

 程序的運行結果以下:
    Originally x = 5 and y = 10.
    Now x = 5 and y = 10 .
使人吃驚的是數值並無發生交換。下面咱們在interchange()中加入一些打印語句來檢查錯誤。
    程序清單 9.14 swap2.c程序
    /*swap2.c  --分析swap1.c程序*/
   測試

#include <stdio.h>
    void interchange(int u,int v);
    int main(void)
    {
        int x = 5,y = 10;

        printf("Originally x = %d and y = %d.\n",x,y);
        interchange(x,y);
        printf("Now x = %d and y = %d.\n",x,y);
        return 0;
    }
    void interchange(int u,int v)
    {
        int temp;
    
        printf("Originally u = %d and v = %d.\n",u,v);
        temp = u;
        u = v;
        v = temp;
        printf("Now u = %d and v = %d.\n",u,v);
    }


新的輸入結果是:
    Originally x = 5 and y = 10.
    Originally u = 5 and v = 10.
    Now u = 10 and v = 5.
    Now x = 5 and y = 10.
函數interchange()並無出錯,u和v的數值確實發生了交換。問題在於把執行結果傳遞給main()的時候。正如已經指出的那樣,interchange()使用的變量獨立於函數main(),所以交換u和v的數值對x 和y 的數值沒有任何影響!使用return()語句能夠嗎?能夠在interchange()的結尾處加入下面的一行語句:
    return (u);
而後改變main()中對該函數的調用方式:
    x = interchange(x,y);
作了上述更改之後,x被賦予了新值,而y的數值並無改變。由於return語句只能把一個數值傳遞給調用函數,但如今咱們須要傳遞兩個數值,這並不是不能實現!只須要使用指針就能夠了。指針

相關文章
相關標籤/搜索