2013-10-27 2 views
-1

У меня есть программа на C++, как это:C++ разности C & *

typedef struct _nodo 
{ 
    ... 
} node;  

void cuenta(node& *Lista, char c); 

Когда я компилирую Don `T показать какую-либо ошибку. Теперь, когда я хочу использовать этот код для программы C, компилятор показать сообщение об ошибке:

error: expected ')' 
void cuenta(node* &Lista, char c); 

Что его разница между & и * в C++ и C?

+0

Я был бы удивлен, если бы этот вопрос не задавался раньше. Короче говоря, '&' в списке аргументов - это функция C++ (ссылки), которая просто отсутствует в C. То, что вы показываете, является допустимым C++, но недействительным C. Вам нужно использовать '*' вместо ' & 'и отредактируйте синтаксис для всех применений параметра в теле функции и убедитесь, что вы вызываете функцию с помощью' & var' вместо просто 'var'. Таким образом, C++ синтаксически более удобен. –

+1

Читайте: [и звездочка и амперсанд в параметре C++] (http://stackoverflow.com/questions/14314640/both-asterisk-and-ampersand-in-a-parameter-c/14314703#14314703) –

+0

Эти вопросы: другой. Этот вопрос задается вопросом, есть ли разница в реализации C и C++. Другой задает цель * & на C++. Я бы не сказал, что они дублированы. – sbhatla

ответ

3

node& *Lista был бы указателем на ссылку на node в C++ (но это невозможно в C++), но ссылочные типы не существуют в C, поэтому это недействительный синтаксис в C. BTW, вы, вероятно, имели в виду node* &Lista -a ссылка на указатель ...

Итак, в C вы передадите указатель на указатель и, например, объявите свой параметр node**pLista и используйте всюду внутри вашей функции *pLista вместо Lista ссылка C++.

+1

Спасибо, исправлено! –

+0

Спасибо, понял. – SerchRac

+3

В любом случае вы не можете иметь указатель на ссылку ([как показано] (http://coliru.stacked-crooked.com/a/8918369fcf7f01b2)). Вероятно, это была ссылка на указатель. – chris

Смежные вопросы