使用pass by value更新实际值

时间:2016-04-25 11:06:35

标签: c function pass-by-value

我想知道是否有任何方法可以使用pass by value更新原始值。

此外,我想知道是否可以将更新的地址返回主

这里我不想使用pass by reference来交换main中的原始值。

#include<stdio.h>
int a = 100;
int f =200;
int *p, * q;
swap(int, int);

main()
     {
    printf("%d %d\n", a,f);
    swap(a, f);

    printf("%d %d\n",a ,f); //values remain same here how to change them
    }

     swap(int a, int f)
    {
        int t;
        p=&a;
        q=&f;

        t=*p;
        *p=*q;
        *q= t;

    printf("%d %d\n",a ,f);
    }

1 个答案:

答案 0 :(得分:2)

  

我想知道是否有任何方法可以使用pass by value更新原始值。

是的,你需要传递一个指针:

void swap(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

并称之为:

swap(&a, &f);

请注意,C中没有传递引用,这是C ++功能。在C 中,所有(包括指针)都按值传递。

并且值传递意味着在C中使用 copy ,因此无法修改传递的内容。

  

此外,我想知道是否可以将更新的地址返回主

是的,你可以。只需将函数返回类型更改为指针类型,然后添加一个带有所选变量地址的return语句。