Это похоже на очень запутанный код.
Как уже упоминалось, первое выражение оценивается как символ & (редактируемая ссылка на символ), а второе - как символ *.
Первый - это указатель с разыменованной ссылкой на ссылку на символ. Второй - указатель на ссылку на символ. И то и другое кажется глупым способом передачи мне данных о символах. Если вам нужно отправить обновляемую ссылку, отправьте &data
, который будет указателем на ваш char data
. Если под send вы подразумеваете переход в метод, вы также можете определить метод как что-то вроде
void foo(char& inData) { ... }
в этом случае вы можете позвонить
foo(data);
и параметр inData внутри foo будет обновлен, поскольку он является справочным. Другой вариант -
void foo(char* data) { ... }
в этом случае вы бы позвонили
foo(&data);
Это более чистый подход в стиле C, но я все еще использую его довольно часто в C ++, потому что я считаю более очевидным, что вы имеете дело со ссылкой на объект, когда он явно объявлен как указатель.
Я не уверен, почему вы хотите иметь дело с такими вещами, как *(char *) &data
, и я рискну сказать, что было бы плохой практикой использовать это в вашем коде, так как это делает ваш код менее читаемым.
Подробнее о ссылках и сравнении с указателями смотрите здесь
http://www.cprogramming.com/tutorial/references.html