code.club

 找回密碼
 立即註冊
搜索
查看: 6988|回復: 4
打印 上一主題 下一主題

C語言函數中的變數問題

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2014-10-15 19:31:42 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
有一個題目如下:

#include <stdio.h>

void swap(int i,int j);

int main(void){
        int x=100;
        int y=300;
        int a=600;
        int b=900;
        int temp;
       
       
        printf("x=%d y=%d a=%d b=%d\n",x,y,a,b);//x=100,y=300,a=600,b=900
        temp=x;
        x=y;
        y=temp;
        printf("now swap,x=%d y=%d \n",x,y);//x=300,y=100
       
        swap(a,b);//a=900,b=600 這裡已變了
        printf("now swap a=%d b=%d\n",a,b);//a=600,b=900 沒有變
        return 0;
}

void swap(int i,int j)
{
        int temp1;
        temp1=i;
        i=j;
        j=temp1;
        printf("after swap(a,b), a=%d b=%d\n",i,j);
}


其實本來swap函數中的引數應是swap(int *i, int *j)用傳址呼叫,就可以整個互調上題中a,b的值。只是我刻意用一般的整數參數來做。結果出現如上的狀況這中間我有點想不通。既然a和b的值在經過swap(a,b)這個涵數時已經掉換了值,為何回到main()之中,它們的值還是維持原樣呢?而為何如果採取swap(&a,&b)的話,回到main()中ab的值就會對調呢?

thanks
回復

使用道具 舉報

沙發
 樓主| 發表於 2014-10-15 20:42:09 | 顯示全部樓層
感謝。那為何main()當中的x,y二者互換就直接把二者的值給調換了,而不用傳址才換呢?
回復 支持 反對

使用道具 舉報

板凳
 樓主| 發表於 2014-10-15 21:02:48 | 顯示全部樓層
本帖最後由 return 於 2014-10-15 21:13 編輯
ckmarkhsu 發表於 2014-10-15 20:45
嗯,你可能要先釐清一下變數 scoop 的概念,在一個 function 裡面的 local var 他的 scoop 只有在這個 func ...


所以等於i,j(a,b)在swap互換,其實互換的是int i和int j的記憶體的內容,所以並不影響到真正於main()中的ab值。而如果是傳址 int *i, int *j,則傳進去的是&a &b,就會直接換掉a b的值了。懂了,十分感謝。
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|手機版|Archiver|code.club  

GMT+8, 2024-5-2 20:55 , Processed in 0.096441 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表