2012-08-07 123 views
0

我想在C中通過引用傳遞一個值。這兩個函數是否相同?有哪些不同?在C++中是一樣的嗎?通過引用C函數的參數

void foo1(int * val1, int * val2) 

void foo2(int &val1, int &val2) 

謝謝,

+0

C支持'reference'嗎? – timrau 2012-08-07 11:41:48

+1

Duplicate of:http://stackoverflow.com/questions/596636/c-difference-between-ampersand-and-asterisk-in-function-method-declar – 2012-08-07 11:41:55

回答

4

引用僅C++(不是C)。

這些方法的實現將會不同,因爲解引用引用不同於解引用C++中的指針。

例如

ref.method(); 

ptr->method(); 

在你傳遞給方法,而不是複製原有的調用對象的兩種情況。

1

第二不是C,只有C++。通過引用傳遞是通過傳遞值的地址來模擬的。

1

在C中,你不能做foo2,因爲在C++中沒有引用運算符。 在C++中它們也不一樣。引用不能爲NULL,並且它們是常量。初始化後他們不能指向另一個位置。

1

void foo1(int * val1, int * val2)相當於 void foo2(int &val1, int &val2) C.在這兩種情況下,函數都需要地址。

第二個用於C++。這可以用來傳遞任何變量的引用。

例如,如果您有像int num1 = 10, num2 = 20;這樣的變量。

foo2(&num1 , &num2)然後需要foo2的在C++但這不會在C.

工作
0

在C中,沒有通過引用傳遞。相反,您可以將地址傳遞給指針,這實際上允許用戶更改傳遞的變量的值。

第二個函數在C++中。

這兩個函數具有不同的簽名,儘管它們允許一個執行相同的任務。