Я хочу передать переменную по значению (я использовал указатели только для того, чтобы не указывать тип параметра) в функцию, чтобы она могла использоваться другой функцией, содержащейся внутри. Внутренней функции можно присвоить переменную любого типа.
Я уже пробовал использовать универсальный указатель (void *), но он говорит мне, что «void * не является типом указателя на объект». Я не хочу приводить указатель, потому что весь смысл использования указателя в том, что он является универсальным.
void print_string(char *string, void *variable) {
Serial.print(string);
Serial.print(": ");
Serial.print(*variable); # This takes a variable of any type (int, float, double, char *);
Serial.println();
}
Я хочу иметь возможность предоставить int, double, float или string (char *).
int *
,float *
,double *
,char *
, но проблема в том, что если размер того, на что вы его применяете, больше, чем размер того, на что первоначально указывал указатель, вы будете получать доступ к памяти за пределами этого переменная, и это могло быть очень плохо. Я думаю, что решение, которое вы ищете, - это ключевое слово_Generic
, которое было введено в стандарте C11. Подробнее об этом читайте здесь: robertgamble.net/2012/01/c11- generic-selections.html 19.06.2019int *
иfloat *
могут иметь размер 8 байтов и оба могут указывать на объекты размером 4 байта, но вы не сможете что-либо сделать с указанным значением, если только вы знаете, какой из двух основных типов это, потому что, пока вы не знаете, что вы не можете решить, что означают биты. 19.06.2019