我認爲,通過值調用函數不會有任何效果,我應該始終參考使用電話,但嘗試這種代碼...既通過價值調用,又通過參考調用工作?
// call by value
#include<stdio.h>
int Add(int a, int b)
{
int c = a + b ;
return c ;
}
int main()
{
int x = 2 , y = 4 ;
int z = Add(x,y);
printf("%d\n",z);
}
輸出將是:6
它工作正常在這兩個方式(按價值計算&呼叫通過引用調用),
// call by reference
#include<stdio.h>
int Add(int* a, int* b)
{
int c = *a + *b ;
return c ;
}
int main()
{
int x = 2 , y = 4 ;
int z = Add(&x,&y);
printf("%d\n",z);
}
output will be: 6
沒有像著名的交換功能的例子 - 通過調用值時,它不換 -
// call by value
#include <stdio.h>
void swap(int a, int b)
{
int temp;
temp = b;
b = a;
a = temp;
}
int main()
{
int x = 1 , y = 2;
printf("x = %d , y = %d\n", x,y);
swap(x, y);
printf("after swapping\n");
printf("x = %d , y = %d\n", x,y);
return 0;
}
..它只是工作參考
// call by reference
#include <stdio.h>
void swap(int *a, int *b)
{
int temp;
temp = *b;
*b = *a;
*a = temp;
}
int main()
{
int x = 1 , y = 2;
printf("x = %d , y = %d\n", x,y);
swap(&x, &y);
printf("after swapping\n");
printf("x = %d , y = %d\n", x,y);
return 0;
}
那麼如何判斷是否「按值調用」去上班還是不打電話?!
「着名的swap函數示例」?你有什麼考慮? –
您已更改方法的簽名:「int Add(int * a,int * b)'。很明顯,它現在可以和'&a'和'&b'一起使用! – xanatos
C不支持通過引用。這是**嚴格**按價值傳遞。它也不支持_methods_。 – Olaf