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

C語言 函數參數的傳遞

編輯:關於C語言
 

該例子說明幾個問題
 

  • 函數參數的傳遞:值傳遞

    1. 以Exchg1為例。
    2. 函數在調用時隱含地把實參a、b的值分別賦值給了x、y,之後Exchg1函數體內再也沒有對a、b進行任何的操作了。
    3. 當然a、b的值沒有改變啦。

  • 函數參數的傳遞:地址傳遞

    1. 以Exchg2為例。
    2. 函數在調用時隱含地把實參&a、&b的值分別賦值給了指針px、py,之後Exchg2函數體內對*px、*py的操作當然也就是對a、b變量本身的操作了。

  • 函數參數的傳遞:引用傳遞

    1. 以Exchg3為例。
    2. x、y分別是a、b的別名。之後Exchg3函數體內操作的其實就是實參a、b本身。
    3. 函數調用和值傳遞一樣,但函數定義和值傳遞不同。


在函數定義格式上有不同
值傳遞在定義處: Exchg1(int x, int y);
引用傳遞在定義處:Exchg3(int &x, int &y);

調用時格式相同:
值傳遞: Exchg1(a, b);
引用傳遞:Exchg3(a, b);

功能上不同:
值傳遞的函數裡操作的不是a、b變量本身,只是將a、b值賦給了x、y。函數操作的只是x、y變量,a、b的值不會被Exchg1函數所修改。
引用傳遞Exchg3(a, b)函數裡是用a、b分別替代了x、y。函數裡操作的就是a、b變量本身,因此a、b的值可在函數裡被修改的。

 

  • 總結:

函數參數傳遞的3種形式是人為劃分的,其本質都是隱含地將實參賦值給形參的值傳遞過程。

原文:徹底搞定C指針-姚雲飛

測試環境vc6.0
********************************************************************/

#include <stdio.h>

void Exchg1(int x, int y);
void Exchg2(int *px, int *py);
void Exchg3(int &x, int &y);

int main(void)
{
int a = 4, b = 6;

//Exchg1(a, b);
//Exchg2(&a, &b);
Exchg3(a, b);
printf("a = %d, b = %d\n", a, b);

return 0;
}

void Exchg1(int x, int y)
{
int tmp;
tmp = x;
x = y;
y = tmp;
printf("x = %d, y = %d\n", x, y);
}

void Exchg2(int *px, int *py)
{
int tmp = *px;
*px = *py;
*py = tmp;
printf("*px = %d, *py = %d\n", *px, *py);
}

void Exchg3(int &x, int &y)
{
int tmp = x;
x = y;
y = tmp;
printf("x = %d, y = %d\n", x, y);
}


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