Demystifying Data Types in C

For any programmer starting out with C, making sense of the various data types feels akin to navigating a maze. The correct choice of data type is fundamental for crafting stable C programs that run efficiently. But with so many types and qualifiers to juggle, it‘s no wonder beginners feel overwhelmed!

This guide serves as your definitive reference to clarify all key data types available in C. With easy-to-grasp explanations around declaration, sizes, ranges and use-cases, you‘ll be manipulating data types like a pro in no time.

Let‘s get started!

Why Data Types Matter

But before we jump right in, it helps to understand why data types are so crucial in a systems programming language like C.

In simple terms, data types classify data used in a program based on two key properties:

  1. Type – The kind of data (integer, character etc.)
  2. Size – The amount of storage space required

Getting these two attributes right for your variables has cascading benefits:

  • Optimal Memory Usage: Proper data types ensure only required memory is allocated
  • Security: Data stays in expected format reducing crashes/hacks
  • Organization: Code logic mirrors real-world entities closely
  • Efficiency: Match data needs to system capabilities

With this context, let‘s explore the common data types available in C one-by-one.

Basic Data Types

These fundamental types form the building blocks of any C program.


Integers represent whole numbers (without a decimal point) like:

  • Positive numbers: 1, 5, 10000
  • Negative numbers: -6, -500
  • Zero
short count = 7; //short integer
long total = 5000; //long integer 
TypeStorage (bytes)Range
short2-32,768 to 32,767
int4-2 billion to +2 billion
long8higher than int range

Use When: perfect for counting quantities, IDs, loops.


The char type handles single characters like ‘a‘, ‘7‘, ‘$‘. It uses 1 byte to store ASCII representations internally.

char symbol = ‘%‘; 

Use When: Storing character data including letters, digits etc. Useful for checking character by character in strings.

Floating Point

Real numbers with decimal points (like 5.3, 0.05, -20.67) are stored in floating point types namely float and double.

float payment = 99.99f; //float value  
float4 bytes~7 digits+/- 3.4e+/- 38
double8 bytes~15 digits+/- 1.7e+/- 308

Use When: Calculating quantities needing fractions like measurements, currency etc. Often used in scientific applications.

Let‘s build on these fundamental types to represent more complex data with derived data types.

Derived Data Types

These build on top of basic C data types for specialized data handling needs.


Stores a collection of elements of same data type sequentially. Enables accessing elements randomly through indexes.

Array showing sequence of 4 floating point elements

//array of 5 integers 
int marks[5]; 

marks[0] = 98; //first element 

Use When: Storing and structuring multiple values like database records, matrix operations.


Structures congregate different data type members together as one unit.

Structure grouping floating point, character and integer

For example, to store employee details:

struct Employee {
  int id;  
  char name[50];  
  float salary; 

struct Employee john; //variable 

Here id, name etc. represent different aspects of an employee entity.

Use When: Modeling real-world entities with disparate but related attributes.


Unions also group together different data types like structures. But uniquely, all members share the same memory location. Changing one element impacts the others. Helps minimize memory needs when only one element is accessed at a time.

That concludes derived data types! Next up, we have enumerated types and type modifiers.

Enumerated Data Types

Enums allow defining new numeric constants to represent distinct elements that share an underlying relation.

For example, to enumerate direction choices:

enum direction {
  north, south, east, west  

enum direction walk = west;

This improves code readability and enables documenting the constant choices directly in code.

Use When: Restricting variable values to a finite predetermined set. Useful for representing fixed categories like weekdays, status codes etc.

Type Modifiers

You can tweak the core characteristics of basic C data types using these modifiers:

Signed vs Unsigned

Integers are signed by default to allow negative numbers. The unsigned modifier limits them to positive numbers only.

unsigned short positiveNumber; //only positive  
signed char canBeNegative; 

Short, Long

Short and long modifiers shrink or expand the default storage sizes for integer types.

For example:

short age; //2 bytes  
long salary; //8 bytes


Const indicates the value must remain unchanged after initialization. Useful for constants.

const float PI = 3.1415;

Attempting to change a const value will now trigger compiler error!

And that‘s a wrap on the most essential C data types and modifiers! Let‘s round up everything we learned.

Key Takeaways

  • C offers a rich variety of data types to represent various kinds of real world as well as programming data
  • Choosing appropriate data types in C based on storage needs, range and nature of operations is crucial
  • Mastering combinations of basic types, derived types, modifiers enable you to model complex data interactions required for stable program behavior
  • Data types form the basic vocabulary for any C programmer to read, write and debug code effectively

With this consolidated reference guide handy, you are now fully equipped to harness the power of C data types!

Frequently Asked Questions

  1. What are the data type categories available in C?

    C offers basic types (integer, character, floating point), derived types (arrays, structures, unions), enumerated user-defined types and type modifiers (long, short).

  2. How to decide which integer type to use in C?

    It depends on value range needed. Short for smaller numbers consuming less memory. Int for typical quantities. Long long for very huge numbers requiring 64-bit storage.

  3. What is the difference between structures and unions?

    Both allow grouping different data type members. But while structures allocate memory for each member separately, unions share memory between all members to save space.

  4. What happens when you assign a larger data type value to a smaller type variable?

    The value has to be explicitly casted to the smaller type. Failure to cast can lead to data loss in the conversion process resulting in bugs.

Did you like those interesting facts?

Click on smiley face to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

      Interesting Facts
      Login/Register access is temporary disabled