اغلب در کاربردهای مختلف برنامه نویسی، با مجموعه‌ای از داده‌ها که ویژگیهای یکسان ندارند مواجهیم و در این حالت، آرایه‌ها قابل استفاده نیستند. در زبان C این مشکل رفع شده است و اجازه می‌دهد که کاربر چند نوع داده‌ با توجه به نیاز خود ایجاد کند که عبارت‌اند از:
الف) ساختار. عبارت است از دسته‌بندی متغیرهایی با صفات مختلف تحت یک نام.
ب) typedef. نام جدیدی برای نوع (type) موجود ایجاد می‌کند.
ج) اجتماع. با آن می‌توان قسمتی از حافظه را برای استقرار دو یا چندین نوع متفاوت از داده‌ها تعریف کرد.
د) شمارشی. فهرستی از نشانه‌ها یا سمبولهاست که می‌توان با مقادیر صحیح شمارشی ۱، ۲، ۳ و… به آنها مراجعه کرد.