參數/引數差別+ Function arguments by reference

學習筆記
Nov 10, 2020

--

在c語或其他程式語言中,參數與引數之間有什麼差別?

參數(parameter):用在函式定義時的數值

引數(argument):呼叫函式時的實際數值

以下程式為例:

void addone(int n) {
n++;
}

int x=5;
printf("Before: %d\n", x);
addone(x);
//x為引數,n則為參數

Function arguments by reference

例如以下的範例,參數 nint 型態,呼叫函式時提供 x 作為引數:

void addone(int n) {
n++;
}
int x=5;
printf("Before: %d\n", x);
addone(x);
printf("After: %d\n", x);

可以想像成addone(x)呼叫函式時,執行了 int n = x 這個動作,然後執行函式的內容,當然地,n 雖然作了遞增運算n++,但是對 x 的儲存值沒有影響x 仍是顯示 5。

但對於以下的範例則會更新值:

void addone(int * n) {
(*n)++;
}

int =5;
printf("Before: %d\n", x);
addone(&x);
printf("After: %d\n", x);

可以想成呼叫函式addone(&x)時,執行了 int *n = &x 這個動作,因此 *n 提取出來的值就是 x,對 *n 的設值(*n)++,就是對 x 的設值,因此程式執行後顯示的就會是 6。

程式練習

Code:

#include <stdio.h>
//寫一個函式做n++
void addone(int *n){
(*n)++;
}
int main(){
int x=5;
printf("before:%d\n",x);
//int * n = &x 指標n存x的記憶體位置
//*n等於x記憶體位置的值>>x的值
addone(&x);
printf("after:%d\n",x);
return 0;
}

Output:

before:5
after:6

--

--

No responses yet