我有一段用C ++编写的代码,需要用C语言编写。我转换了大部分代码,但我无法弄清楚如何将函数中的C ++ pass-by-reference转换为C代码,即
示例:
int& a;
它在某些函数中用作输入变量:
void do_something(float f, char ch, int& a)
当我用C编译它时,我得到编译器错误。什么是用C?中的引用替换传递的正确方法?
答案 0 :(得分:9)
在C中执行此操作的方法是通过指针传递:
void do_something(float f, char ch, int* a)
同时使用in do_something
代替
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);
}
在致电do_something
时,您需要获取传递的内容的地址,而不是
int foo = 0;
d_something(0.0, 'z', foo);
你需要这样做:
int foo = 0;
d_something(0.0, 'z', &foo);
获取foo的地址(即指针)。
答案 1 :(得分:1)
因为C中没有引用,所以你必须改为使用指针:
void do_something(float f, char ch, int *a)
然后在函数体中你必须取消引用它以获取或修改指向的值:
*a = 5;
假设x
中有int
,并且您想调用该函数,则使用&
运算符获取其地址(将其转换为int *
指针):
do_something(f, ch, &x)
答案 2 :(得分:1)
最接近的等价物是指针:
do_something(float f, char ch, int* a)
完成此操作后,您需要更改a
- >函数内的任何地方*a
,并更改对函数的调用以传递&a
而不是a
。
答案 3 :(得分:1)
“简单”,但不可取的,方法是从帮助器指针变量获取帮助,#define> 随时为此答案提供帮助!如果可以的话,我愿意:)
转过来
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的引入必须小心
答案 4 :(得分:1)
在C语言中没有与C ++引用等效的内容。 但是,您可以使用指针。然而,它们是具有自己地址的变量,而C ++引用只是别名。
function do_something(float f, char ch, int* a)