C語言中函式引數傳遞的兩種方式
阿新 • • 發佈:2018-12-13
問題及程式碼:
/* *完成日期:2018.10.2 * *問題描述:c語言函式引數傳遞的兩種方式 * */ #include <stdio.h> void swap1(int x, int y); //對交換函式myswap1的提前宣告 (傳值) void swap2(int *p1, int *p2); //對交換函式myswap1的提前宣告 (傳地址) void swap1(int x, int y)//傳值 { int t; t = x; x = y; y = t; } void swap2(int *p1, int *p2)//傳地址 { int t; t = *p1; *p1 = *p2; *p2 = t; } void swap3(int &x, int &y)//引用形參 { int t; t = x; x = y; y = t; } int main() { int a, b; printf("請輸入需要交換的兩個整數\n"); scanf_s("%d%d", &a, &b); swap1(a, b); printf("經過swap1交換後的結果是a=%d b=%d\n", a, b); swap2(&a, &b); printf("經過swap2交換後的結果是a=%d b=%d\n", a, b); return 0; }
執行結果: 知識點總結: 1.按值傳遞(pass by value)
使用這種方式,呼叫函式本省不對實參進行操作,也就是說,即使形參的值在函式中發生了變化,實參 的值也完全不會受到影響,仍為呼叫前的值。這相當於把實參賦值一份給形參,然後呼叫後記憶體回收。
2.地址傳遞(pass by pointer)
地址傳遞與按值傳遞的不同在於,它把實參的儲存地址傳送給對應的形參,從而使得形參指標和實參指 針指向同一個地址。因此,被呼叫函式中對形參指標所指向的地址中內容的任何改變都會影響到實參。
c++中還支援——>引用傳遞(pass by reference)
以引用為引數,則既可以使得對形參的任何操作都能改變相應的資料,又使得函式呼叫顯得方便、自然 。引用傳遞方式是在函式定義時在形參前面加上引用運算子“&”。引用相當於實參的別名,他和實參是同一個變數或數值,它的改變就是實參的改變。