通过指针传递/通过C中的引用传递

时间:2013-12-07 16:30:14

标签: c pointers

我知道如何在函数中传递指针,我觉得我仍然会混淆两个术语,例如通过引用传递和传递指针。

我被问到这个问题:

  

编写一个程序,使用指针通过引用传递变量x   函数,其值加倍。函数的返回类型应该是无效的。该   在函数调用之后,应该从main()打印变量的值。该   x的原始值是5。

我写了下面的代码。你能根据问题的要求告诉我哪个评论编号是正确的,并清楚我的疑问吗?

#include <stdio.h>
//double pointer
//void double_ptr(int **x_ptr)
//{
 //   **x_ptr *=2;

//}

void double_ptr(int *x_ptr)
{
    *x_ptr *=2;
}


int main()
{
    int x=5;
    int *x_ptr=&x;      // single pointer

    //double_ptr(*x_ptr);  // this is out of question's demand.
    //int**x_x_ptr=&x_ptr;    // double pointer
    //double_ptr(&x_ptr);     // 1. pass with double pointer
    //double_ptr(x_x_ptr);      //2. pass with double pointer
    //printf("%d",**x_x_ptr); //3.print with double pointer

    double_ptr(x_ptr);     //4.pass by pointer?
    //double_ptr(&x);          //5.pass by reference?
    printf("%d",*x_ptr);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

传递指针实际上是按值传递,在C中没有通过引用传递的概念。

在C中,通过引用传递==通过指针传递。

void double_ptr(int *x_ptr)
{
      *x_ptr *=2;
}
int main()
{
      int x=5;
      double_ptr(&x); /* a value is being passed*/
}

通过引用传递(在C ++中):

void double_ptr(int& x_ptr)
{
   x_ptr *=2;
}
int main()
{
     int x=5;
     int &x_ptr=x;
     double_ptr(x_ptr); /* no temporary is being created i.e. no extra memory allocation is here*?
}