程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 調用函數交換兩個數

調用函數交換兩個數

編輯:關於C語言

/*

時間: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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved