2014-02-21 210 views
0

如果我只將一個整數數組的元素(不是整個數組)傳遞給一個函數,它是通過值還是通過引用默認傳遞的?將數組傳遞給函數c

用於示例 -

arr[]={2,3,4,5,6} 
ans=fun(arr[2]) 

和樂趣是一些功能,其乘以2的任何值,然後將我得到的ANS爲8或4,如果我打印的常用3 [2]中的主要功能之後?任何幫助,將不勝感激。

+0

嘗試一個小例子? – gongzhitaao

+1

值。 arr [2]是4.假設fun定義爲:int fun(int arg){printf(「%d \ n」,arg);回報(ARG); },有趣的是打印4. – ChuckCottrill

+2

@CommanderCorianderSalamander C沒有參考 – gongzhitaao

回答

5

C沒有參考文獻。

int fun(int a) { 
    a = 0; 
} 

int main() { 
    int arr[5] = {2, 3, 4, 5, 6}; 
    fun(arr[2]); 

    printf("%d\n", arr[2]); //prints 4 
    return 0; 
} 

您可以通過指針(還是交給由值的功能,但該值是你感興趣的值的地址)。

int fun(int *a) { 
    *a = 0; 
} 

int main() { 
    int arr[5] = {2, 3, 4, 5, 6}; 
    fun(&arr[2]); 

    printf("%d\n", arr[2]); //prints 0 
    return 0; 
} 

我中有你的意思C++懷疑。在這種情況下,函數的簽名決定它是否通過引用傳遞。

int fun(int &a) { //by reference, because of & 
    *a = 0; 
} 

int main() { 
    int arr[5] = {2, 3, 4, 5, 6}; 
    fun(arr[2]); 

    printf("%d\n", arr[2]); //prints 0 
    return 0; 
} 
1

您的問題被打上c,所以我會在這方面回答:

在C語言中,沒有傳遞通過引用。我們可以通過傳遞指針來獲得與傳遞引用類似的結果。這就是說,如果你沒有傳遞一個函數指針,那麼你不會改變調用範圍內的值。

void func(int a) 
{ 
    a = a * 2; // value of a within the calling scope does not change (pass-by-value) 
} 

void func2(int *a) 
{ 
    *a = (*a) * 2; // value pointed to by a is changed within the calling scope 
} 
0

在C數組中作爲指針傳遞給第一個元素。它們是唯一沒有真正通過值傳遞的元素(指針是按值傳遞的,但數組不會被複制)。 這允許被調用的函數修改內容。

當我們傳遞任何數組作爲參數時,重要的是我們如何在被調用的函數中處理它。如果您獲取傳遞值(* val)的地址,那麼它將表現爲傳遞引用(Pass by reference),如果您直接在變量中獲取值(val),則它的行爲將類似於按值傳遞。