繁体   English   中英

在C中按指针传递/按引用传递

[英]Pass by pointer/pass by reference in C

我知道如何在函数中传递指针,我觉得我仍然对两种术语感到困惑,例如按引用传递和按指针传递。

有人问我:

编写一个程序,该程序使用指针通过将变量x传递给其值加倍的函数来传递变量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;
}

指针传递实际上是按值传递,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*?
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM