我有一段代码是用C++编写的,需要用C语言编写。我转换了大部分代码,但我无法弄清楚如何将函数中的C++传递引用转换为C代码,即如何将使用C++ pass-by-reference的函数转换为C?
实施例:
int& a;
它是在一些用作输入变量使用:
void do_something(float f, char ch, int& a)
当我与CI GET编译器错误编译它。什么是正确的方式来取代C中的引用传递?
我有一段代码是用C++编写的,需要用C语言编写。我转换了大部分代码,但我无法弄清楚如何将函数中的C++传递引用转换为C代码,即如何将使用C++ pass-by-reference的函数转换为C?
实施例:
int& a;
它是在一些用作输入变量使用:
void do_something(float f, char ch, int& a)
当我与CI GET编译器错误编译它。什么是正确的方式来取代C中的引用传递?
在C做的方式是通过指针传递:在do_something
使用,而不是
void do_something(float f, char ch, int& a)
{
a = 5;
printf("%d", a);
}
时
void do_something(float f, char ch, int* a)
而且您现在需要提领a
void do_something(float f, char ch, int* a)
{
*a = 5;
printf("%d", *a);
}
而当拨打电话do_something
时,您需要知道什么是被传递的,所以不是
int foo = 0;
d_something(0.0, 'z', foo);
你需要做的:
int foo = 0;
d_something(0.0, 'z', &foo);
得到(即指针)foo的地址。
因为引用不是在C语言中,你必须通过一个指针来代替:
void do_something(float f, char ch, int *a)
然后在功能您必须取消对它的引用的身体,以获得或者修改所指向的值:
*a = 5;
假设x
在int
,你要调用的函数,使用&
接线员给它的地址(将其转换为int *
指针):
do_something(f, ch, &x)
的最接近的是一个指针:
do_something(float f, char ch, int* a)
已经做到了这一点,你需要改变a
- >*a
函数中无处不在,并改变调用函数传递&a
代替的a
。
“易”,但不可取,方法是从一个辅助指针变量和使用#define
随意downvote这个答案得到帮助!我想,如果我可以:)
打开本
int foo(int &a) {
a = 42;
/* ... */
return 0;
}
到
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 */
}
注:引进的#define必须谨慎进行
我不会建议有人使用这样的'#define',除非他很懒,或者不想记住'a'是一个指针。 –
我实际上会赞成它,因为它很聪明并解释了这个概念,并且我们同意这是不明智的。 –
创造性的答案,但它没有考虑调用约定中的变化(因为您需要更改调用此方法以使用&的代码)。我不会失望,但我不会喜欢,因为这不应该做。 –
有没有相当于C中的C++引用。 但是,您可以使用指针。然而,它们是具有自己地址的变量,而C++引用只是别名。
function do_something(float f, char ch, int* a)
改为使用指针。 – 2011-09-22 15:48:01