Вот C++ код:C не поддерживает передачу переменной по ссылке. Как это сделать?
void Foo(char* k, struct_t* &Root)
, как реализовать это в чистом C?
Вот C++ код: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)
. Чтобы получить доступ к Root
структуры внутри функции Foo
, вы могли бы сказать что-то вроде:
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;
}
Таким образом, только проездом указатели эквивалентно передачи ссылки.
Почему вы не просто посылаете указатель указателя? – PlamZ
что вы пытаетесь достичь? –
так передайте указатель на переменную, и есть ваша «ссылка» –