/*
時間:2013年5月27日23:28:43
功能:調用函數交換兩個數
文件名:swap.cppc語言不可以:引用傳遞)
*/
# include "stdio.h"
//值傳遞
void Exchg1(int x, int y) //定義中的x,y變量被稱為Exchg1函數的形式參數
{
int tmp;
tmp = x;
x = y;
y = tmp;
}
//地址傳遞
void Exchg2(int *px, int *py)
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
}
//地址傳遞,但是錯誤。
void Exchg3(int *px, int *py)
{
int *tmp;
tmp = px;
px = py;
py = tmp;
}
//引用傳遞
void Exchg4(int &x, int &y) //注意定義處的形式參數的格式與值傳遞不同
{
int tmp;
tmp = x;
x = y;
y = tmp;
}
int main()
{
int a,b;
printf("請輸入兩個數:a和b\n");
scanf("%d%d",&a,&b);
printf("調用第一個函數!!!\n");
Exchg1(a,b);
printf("a = %d,b = %d\n",a,b);
printf("調用第二個函數!!!\n");
Exchg2(&a,&b);
printf("a = %d,b = %d\n",a,b);
printf("調用第三個函數!!!\n");//並沒有交換原來的值。
Exchg3(&a,&b);
printf("a = %d,b = %d\n",a,b);
printf("調用第四個函數!!!\n");
Exchg4(a,b); //這裡調用方式與值傳遞一樣
printf("a = %d,b = %d\n",a,b);
//注意:連續調用時:變的值又變過來了。
return 0;
}
/*
1 *****************
為了說明這個問題,我先給出一個代碼:
int a=4;
int x;
x=a;
x=x+3;
看好了沒,現在我問你:最終a值是多少,x值是多少?
a==4 x==7)
在這個代碼中,你要明白一個東西:雖然a值賦給了x,但是a變量並不是x變量哦。
我們對x任何的修改,都不會改變a變量,雖然簡單,並且一看就理所當然。
被調函數的變量,在調用之後就它的內存就釋放了,所以不會改變。
2***********************
遙控改變a,b的值。當a的地址傳遞給pa時,*pa值的
改變a的值也發生改變,被*pa的新值所覆蓋。形參和
實參共用同一段存貯空間,如果形參數組中元素的值發生變化,
實參數組中元素的值也同時發生變化。
就如:張三小名:小三子),你表揚了張三,小三子也受到了表揚,
你表揚小三子,張三同樣會受到表揚。
3***************
因為pa,pb地址的值的改變,a,b並沒有受到影響。
這是我的第一篇技術日志,不當之處請 大家批評指正。
*/
本文出自 “交換兩個數” 博客,請務必保留此出處http://5893947.blog.51cto.com/5883947/1269082