2015-01-19 9 views
-5

Вот C++ код:C не поддерживает передачу переменной по ссылке. Как это сделать?

void Foo(char* k, struct_t* &Root) 

, как реализовать это в чистом C?

+0

Почему вы не просто посылаете указатель указателя? – PlamZ

+1

что вы пытаетесь достичь? –

+5

так передайте указатель на переменную, и есть ваша «ссылка» –

ответ

0

Вы правы, 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; 
} 

Таким образом, только проездом указатели эквивалентно передачи ссылки.