जैसा कि हम जानते हैं कि सरणियाँ परिभाषा के अनुसार सजातीय हैं। इसलिए हमें एक ही प्रकार के डेटा को एक सरणी में रखना होगा। लेकिन अगर हम अलग-अलग प्रकार के डेटा को स्टोर करना चाहते हैं, तो ट्रिक क्या होगी? सी में पुरानी भाषाओं की तरह, हम विभिन्न प्रकारों को कृत्रिम रूप से एक प्रकार में संयोजित करने के लिए यूनियनों का उपयोग कर सकते हैं। फिर हम इस नए प्रकार पर एक सरणी परिभाषित कर सकते हैं। यहां जिस प्रकार की वस्तु में एक सरणी तत्व वास्तव में होता है वह एक टैग द्वारा निर्धारित किया जाता है। आइए एक संरचना को इस तरह देखें -
struct Vehicle{ int id; union { Bus b; Bike c; Car d; } };
फिर प्रोग्रामर को एक कन्वेंशन स्थापित करना होगा कि आईडी टैग का उपयोग कैसे किया जाएगा। मान लीजिए, उदाहरण के लिए, जब आईडी 0 है, तो इसका मतलब है कि जिस वाहन का प्रतिनिधित्व किया जाता है वह वास्तव में एक बस आदि है। संघ बस, बाइक और कार के बीच सबसे बड़े प्रकार के लिए मेमोरी आवंटित करता है। यदि वस्तुओं के आकार में बहुत अधिक असमानता है तो यह स्मृति के लिए बेकार है।
वस्तु उन्मुख भाषाओं में, हम विरासत की अवधारणा का उपयोग कर सकते हैं। मान लीजिए कि हमारे पास वाहन नामक एक वर्ग है, और अन्य सभी प्रकार जैसे बस, बाइक और कार इसके उप-वर्ग हैं। तो अगर हम वाहन के लिए एक सरणी परिभाषित करते हैं, तो वह इसके सभी उप-वर्गों को भी पकड़ सकता है। यह हमें एक ही सरणी में कई प्रकार के डेटा को स्टोर करने में मदद करेगा।