在c語或其他程式語言中,參數與引數之間有什麼差別?
參數(parameter):用在函式定義時的數值
引數(argument):呼叫函式時的實際數值
以下程式為例:
void addone(int n) {
n++;
}
int x=5;
printf("Before: %d\n", x);
addone(x);//x為引數,n則為參數
Function arguments by reference
例如以下的範例,參數 n
是 int
型態,呼叫函式時提供 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