Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何转换使用C++;通过引用传递到C? 我有一段代码,用C++编写,在C.需要它,我转换了大部分代码,但是我不能理解如何将C++中的函数引用转换成C代码,即_C++_C - Fatal编程技术网

如何转换使用C++;通过引用传递到C? 我有一段代码,用C++编写,在C.需要它,我转换了大部分代码,但是我不能理解如何将C++中的函数引用转换成C代码,即

如何转换使用C++;通过引用传递到C? 我有一段代码,用C++编写,在C.需要它,我转换了大部分代码,但是我不能理解如何将C++中的函数引用转换成C代码,即,c++,c,C++,C,例如: int& a; 它在某些函数中用作输入变量: void do_something(float f, char ch, int& a) 当我用C编译它时,我会得到编译器错误。在C中,什么是替换按引用传递的正确方法?在C中执行此操作的方法是按指针传递: void do_something(float f, char ch, int* a) 在中使用时,也要做一些事情而不是 void do_something(float f, char ch, int& a) {

例如:

int& a;
它在某些函数中用作输入变量:

void do_something(float f, char ch, int& a)

当我用C编译它时,我会得到编译器错误。在C中,什么是替换按引用传递的正确方法?

在C中执行此操作的方法是按指针传递:

void do_something(float f, char ch, int* a)
中使用时,也要做一些事情
而不是

void do_something(float f, char ch, int& a)
{
   a = 5;
   printf("%d", a);
}
您现在需要取消引用
a

void do_something(float f, char ch, int* a)
{
   *a = 5;
   printf("%d", *a);
}
当调用
dou\u something
时,您需要将正在传递的内容的地址记为a,因此

int foo = 0;
d_something(0.0, 'z', foo);
您需要执行以下操作:

int foo = 0;
d_something(0.0, 'z', &foo);

要获取foo的地址(即指向foo的指针)。

因为引用在C中不可用,您必须传递一个指针:

void do_something(float f, char ch, int *a)
然后,在函数体中,必须取消对它的引用,以获取或修改指向的值:

*a = 5;
假设
int
中的
x
,并且您希望调用该函数,则使用
&
运算符获取其地址(将其转换为
int*
指针):


最接近的等价物是指针:

do_something(float f, char ch, int* a)
完成此操作后,您需要在函数中的任何地方更改
a
->
*a
,并更改对函数的调用以传递
&a
,而不是
a

简单但不可取的,方法是从助手指针变量和#define
获得帮助,请随意否决此答案!如果可以,我会:)

转这个

int foo(int &a) {
    a = 42;
    /* ... */
    return 0;
}
进入


<强>注释:必须定义C.的定义< <强> > /p> < p>在C++中没有等价于C++引用的 但是,您可以使用指针。但是它们都有自己的地址变量,而C++引用只是别名。

function do_something(float f, char ch, int* a)

我不会建议某人使用这样一个
#define
,除非他非常懒或者不想记住
a
是指针。我实际上会对它投赞成票,因为它很聪明,解释了这个概念,我们一致认为这是不可取的。创造性的回答,但它没有考虑调用约定的变化(因为您需要将调用此的代码更改为使用&)。我不会拒绝投票,但不会向上投票,因为这确实不应该做。
int foo(int *tmpa) {       /* & to *; rename argument */
    #define a (*tmpa)      /* define argument to old variable */
    a = 42;                /* no change */
    /* ... */              /* no change */
    return 0;              /* no change */
    #undef a               /* "undo" macro */
}
function do_something(float f, char ch, int* a)