網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術 > 一般軟體與網路使用討論

回覆
 
主題工具
  #1  
舊 2014-10-15, 07:31 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,995
預設 C語言函數中的變數問題

有一個題目如下:

引用:
#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
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #2  
舊 2014-10-15, 09:00 PM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

swap(a,b);//a=900,b=600 這裡已變了------>>>>>>>>这里没有变 打印的a=900是swap函数打印的 交换了的数值没有传回主程序,所以在主程序里a=600。
printf("now swap a=%d b=%d\n",a,b);//a=600,b=900 沒有變
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。
回覆時引用此篇文章
  #3  
舊 2014-10-15, 09:04 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,995
預設

引用:
作者: yumi 查看文章
swap(a,b);//a=900,b=600 這裡已變了------>>>>>>>>这里没有变 打印的a=900是swap函数打印的 交换了的数值没有传回主程序,所以在主程序里a=600。
printf("now swap a=%d b=%d\n",a,b);//a=600,b=900 沒有變
了解,十分感謝。真是不點不通,還是要點一下才通。哈。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
回覆

主題工具

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 04:52 PM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.