2014-02-21 217 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),则它的行为将类似于按值传递。