C 不支持通过引用传递变量。怎么做?
C does not support passing a variable by reference. How to do it?
这是 C++ 代码:
void Foo(char* k, struct_t* &Root)
如何用纯C实现?
你说得对,C 不支持按引用传递(正如 C++ 所定义的)。但是,C支持传递指针。
从根本上说,指针是引用。指针是存储变量所在内存地址的变量。因此,标准指针是可比较的 C++ 引用。
因此在您的情况下,void Foo(char *k, struct_t* &Root)
类似于 void Foo(char *k, struct_t **Root)
。要访问 Foo
函数中的 Root
结构,您可以这样说:
void Foo(char *k, struct_t **Root){
// Retrieve a local copy of the 1st pointer level
struct_t *ptrRoot = *Root;
// Now we can access the variables like normal
// Perhaps the root structure contains an integer variable:
int intVariable = ptrRoot->SomeIntegerVariable;
int modRootVariable = doSomeCalculation(intVariable);
// Perhaps we want to reassign it then:
ptrRoot->SomeIntegerVariable = modRootVariable;
}
因此,传递指针等同于传递引用。
这是 C++ 代码:
void Foo(char* k, struct_t* &Root)
如何用纯C实现?
你说得对,C 不支持按引用传递(正如 C++ 所定义的)。但是,C支持传递指针。
从根本上说,指针是引用。指针是存储变量所在内存地址的变量。因此,标准指针是可比较的 C++ 引用。
因此在您的情况下,void Foo(char *k, struct_t* &Root)
类似于 void Foo(char *k, struct_t **Root)
。要访问 Foo
函数中的 Root
结构,您可以这样说:
void Foo(char *k, struct_t **Root){
// Retrieve a local copy of the 1st pointer level
struct_t *ptrRoot = *Root;
// Now we can access the variables like normal
// Perhaps the root structure contains an integer variable:
int intVariable = ptrRoot->SomeIntegerVariable;
int modRootVariable = doSomeCalculation(intVariable);
// Perhaps we want to reassign it then:
ptrRoot->SomeIntegerVariable = modRootVariable;
}
因此,传递指针等同于传递引用。