Разница между С++ и C и *

У меня есть программа на С++, подобная этой:

typedef struct _nodo
{
    ...
} node;    

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

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

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

В чем разница между & и * в C++ и C?


person SerchRac    schedule 27.10.2013    source источник
comment
Я был бы удивлен, если бы этот вопрос не был задан раньше. Короче говоря, & в списке аргументов — это функция C++ (ссылки), которой просто нет в C. То, что вы показываете, является допустимым C++, но недопустимым C. Вам нужно будет использовать * вместо & и настроить синтаксис. ко всем использованиям параметра в теле функции и убедитесь, что вы вызываете функцию с &var вместо var. Итак, C++ синтаксически более удобен.   -  person Jonathan Leffler    schedule 27.10.2013
comment
Эти вопросы разные. Этот специально спрашивает, есть ли разница в реализации C и C++. Другой спрашивает цель *& в С++. Я бы не сказал, что они повторяются.   -  person sbhatla    schedule 13.02.2016
comment
На самом деле я пришел к этому вопросу из одного помеченного дубликата, и вопрос или решения там не сказали мне, что C делает это по-другому, поэтому человек не обязательно будет знать об этом.   -  person sbhatla    schedule 13.02.2016


Ответы (1)


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

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

person Basile Starynkevitch    schedule 27.10.2013
comment
В любом случае у вас не может быть указателя на ссылку (как показано). Вероятно, это была ссылка на указатель. - person chris; 27.10.2013