У меня есть что-то вроде этогоВозможно ли изменение типа указателя во время выполнения? (C программирования)
void my_very_large_function(void){
struct A *sA;
< a lot of references to *sA structure in many many lines >
}
и теперь я хочу использовать также другой тип структуры в зависимости от аргумента, переданного функции, но я не хочу, чтобы проверить, что аргумент в каждой ссылки я делать.
void my_very_large_function(int type){
struct A *sA;
struct B *sB;
if(type == 0) // I dont want this because there are too many references
<use *sA>
else
<use *sB>
}
Есть ли способ установить тип указателя в начале функции?
Использование указателей void не является удовлетворительным, потому что мне придется бросать каждый раз, когда я его использую, а также нужно будет проверить аргумент, чтобы решить, как отличать (от A или до B).
void my_very_large_function(int type){
struct A *sA;
struct B *sB;
void *ptr;
if(type == 0)
ptr = (struct A *) *sA; // is there a way in C to make this cast permanent? I think not
else
ptr = (struct B *) *sB;
< now use just ptr >
}
Я думаю, что я мог бы использовать союз, если одна структура будет вложено в начале другого, но структуры не похожи
Если структуры не похожи, как это вообще будет работать в первую очередь? Или вы имеете в виду, что у вас есть одноименные поля, только в разных местах? – tabstop
Пожалуйста, объясните гораздо больше, что делает 'my_very_large_function', и * почему это так велико !!!! Разве вы не можете разбить его на более мелкие (возможно, встроенные) функции? Что такое «struct A» и «struct B» конкретно? Какая связь между ними ??? Покажите гораздо больше кода, пожалуйста! –
Возможно, какое-то использование 'void *'? – zoska