C-均为价值呼叫和通过参考工作来调用



我认为按值调用函数永远不会起作用,我应该始终使用参考来使用调用,但尝试此代码...

// 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("%dn",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("%dn",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 = %dn", x,y); 
   swap(x, y); 
   printf("after swappingn"); 
   printf("x = %d , y = %dn", 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 = %dn", x,y); 
   swap(&x, &y); 
   printf("after swappingn"); 
   printf("x = %d , y = %dn", x,y); 
   return 0;
}

那么,我该如何判断"按价值打电话"是否可以工作?

那么,我该如何通过价值方法判断该调用是有效的?!

好吧,这取决于您的功能要做什么。

在上面的示例中,您只需要用于计算的(x,y)的值,但是您永远不会计划在功能期间更改其值。虽然在这种情况下会逐个引用,但这是不确定的。

在另一个(间接给出的)示例中,您显然要更改两个变量的内容(即 - 交换)。您可以从掉期功能中的主要功能中访问这些变量,但是如何使更改持续呢?只有通过引用呼叫才有可能,因为您必须将更改的内容写入幸存的变量。

以下内容将行不通:

// call by value 
#include<stdio.h>
void Swap(int a, int b)
{
    int c = a;
    a = b;
    b = c;
    // from here on a, b, c will be destroyed
    // therefore the change cannot be seen outside the function
}
int main()
{
    int x = 2 , y = 4 ;
    Swap(x,y);
    printf("x: %d --- y: %dn",x,y); 
}

通常要记住:

如果您想进行一个应该在函数结束时幸存下来的更改,请逐个引用。如果您只是使用一些数据,但不想(或不得不)更改其价值,请逐个呼叫。

相关内容

  • 没有找到相关文章

最新更新