2015-03-19 2 views
-3

Мне нужно создать объединение в c без использования ключевого слова union.Как я могу создать союз без использования union в c?

x = 1; 

… 

x = ‘c’; 

… 

x = 3.1415; /* the data type of x changes during runtime. */ 

… 

Я также пытаюсь использовать массив.

+3

Это чисто академическое любопытство, или у вас есть настоящая проблема, которую вы пытаетесь решить? –

+1

Почему ??? Если вам нужен союз, используйте союз. – abelenky

+2

Я думаю, вам нужно прочитать о [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem), а затем уточнить свой вопрос. –

ответ

3

Строго говоря, вы не можете сделать union без объявления union, так как union - удобный синтаксис для совместного использования хранилища стандартным способом. Однако нет такой вещи, как «команда объединения».

Если вы хотите сохранить значения разных типов в пространстве разделяемой памяти, выберите тип максимального размера среди типов, которые вы хотите, чтобы ваш притворный союз был закрыт, и выполните задания с использованием указателей-указателей:

long long shared; 
*((int*)&shared) = 5; 
*((char*)&shared) = 'c'; 
*((float*)&shared) = 3.14f; 
+0

это работает по запросу, но, конечно же, это не то, что он хочет. Он действительно хочет, чтобы c был python или javascript - это не так. (BTW - комментарий на вопрос, а не год отличный ответ) – pm100

+0

примечание к OP: этот код - это то, что союз сделал бы для вас, но в понятном и понятном виде – pm100

+1

Также стоит отметить, что этот код предполагает 'long long' удовлетворяет размеру и требования к выравниванию всех типов, которые вы собираетесь использовать. Если у вас есть сомнения, 'assert (sizeof (long long)> = sizeof (int) && alignof (long long)> = alignof (int) && ...)' –

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