Bird
Raised Fist0
Cprogramming~20 mins

Storage size overview in C - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Storage Size Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this code snippet?

Consider the following C code that prints the size of different data types using sizeof. What will be the output?

C
#include <stdio.h>

int main() {
    printf("%zu %zu %zu\n", sizeof(char), sizeof(int), sizeof(double));
    return 0;
}
A1 2 4
B1 4 8
C2 4 8
D1 8 8
Attempts:
2 left
💡 Hint

Remember that char is usually 1 byte, int is commonly 4 bytes on modern systems, and double is often 8 bytes.

❓ Predict Output
intermediate
2:00remaining
What is the size of a pointer on a 64-bit system?

Given the following code, what will be the output on a typical 64-bit system?

C
#include <stdio.h>

int main() {
    int *p;
    printf("%zu\n", sizeof(p));
    return 0;
}
A8
B16
C2
D4
Attempts:
2 left
💡 Hint

Think about the size of pointers on 64-bit architectures.

❓ Predict Output
advanced
2:00remaining
What is the output of this struct size code?

Consider this C code that prints the size of a struct with different data types. What is the output?

C
#include <stdio.h>

struct Data {
    char c;
    int i;
    double d;
};

int main() {
    printf("%zu\n", sizeof(struct Data));
    return 0;
}
A16
B20
C13
D24
Attempts:
2 left
💡 Hint

Remember that structs may have padding to align data properly in memory.

❓ Predict Output
advanced
2:00remaining
What is the output of this union size code?

What will this program print when it runs?

C
#include <stdio.h>

union U {
    char c;
    int i;
    double d;
};

int main() {
    printf("%zu\n", sizeof(union U));
    return 0;
}
A16
B4
C8
D1
Attempts:
2 left
💡 Hint

Unions allocate memory equal to the size of their largest member, possibly with padding.

🧠 Conceptual
expert
3:00remaining
How many bytes does this bit-field struct occupy?

Given the following struct with bit-fields, how many bytes does it occupy on a typical 64-bit system?

C
struct BitField {
    unsigned int a : 3;
    unsigned int b : 5;
    unsigned int c : 6;
    unsigned int d : 18;
};
A4
B8
C2
D6
Attempts:
2 left
💡 Hint

Bit-fields are packed into the smallest number of bytes that can hold all bits, aligned to the base type size.

Practice

(1/5)
1. Which of the following data types typically uses the least amount of memory in C?
easy
A. int
B. char
C. float
D. double

Solution

  1. Step 1: Recall typical sizes of basic data types

    In C, char usually takes 1 byte, int 4 bytes, float 4 bytes, and double 8 bytes.
  2. Step 2: Compare sizes to find the smallest

    Since 1 byte is less than 4 or 8 bytes, char uses the least memory.
  3. Final Answer:

    char -> Option B
  4. Quick Check:

    char = 1 byte [OK]
Hint: Remember char is 1 byte, smallest basic type in C [OK]
Common Mistakes:
  • Confusing char with int size
  • Assuming float is smaller than char
  • Thinking double is smallest
2. Which of the following is the correct way to declare a variable of type double in C?
easy
A. double num;
B. double: num;
C. num double;
D. double-num;

Solution

  1. Step 1: Recall C variable declaration syntax

    In C, the type comes first, then the variable name, ending with a semicolon.
  2. Step 2: Check each option for correct syntax

    double num; follows this rule: double num;. Others have invalid syntax like colon, reversed order, or invalid characters.
  3. Final Answer:

    double num; -> Option A
  4. Quick Check:

    Type before name, semicolon ends declaration [OK]
Hint: Type first, then variable name, end with semicolon [OK]
Common Mistakes:
  • Using colon instead of semicolon
  • Reversing type and variable name
  • Using invalid characters like dash
3. Consider the following C code snippet:
printf("%zu", sizeof(long));

What is the expected output on a typical 64-bit system?
medium
A. 8
B. 4
C. 2
D. 16

Solution

  1. Step 1: Understand sizeof operator on 64-bit systems

    On most 64-bit systems, long is 8 bytes (64 bits).
  2. Step 2: Match the output of sizeof(long)

    The sizeof operator returns the size in bytes, so it returns 8.
  3. Final Answer:

    8 -> Option A
  4. Quick Check:

    long = 8 bytes on 64-bit [OK]
Hint: On 64-bit, long is usually 8 bytes [OK]
Common Mistakes:
  • Assuming long is 4 bytes on 64-bit
  • Confusing bits with bytes
  • Using wrong format specifier in printf
4. The following code tries to print the size of a short variable but causes a compilation error:
short s;
printf("%d", sizeof(s));

What is the main reason for the error?
medium
A. Variable s is not initialized
B. Missing semicolon after short s
C. Cannot use sizeof on variables
D. Using wrong format specifier for sizeof result

Solution

  1. Step 1: Identify the type returned by sizeof

    The sizeof operator returns a value of type size_t, which is an unsigned integer type.
  2. Step 2: Check printf format specifier compatibility

    The format specifier %d expects an int, but sizeof returns size_t. The correct specifier is %zu.
  3. Final Answer:

    Using wrong format specifier for sizeof result -> Option D
  4. Quick Check:

    Use %zu for sizeof output [OK]
Hint: Use %zu to print sizeof results safely [OK]
Common Mistakes:
  • Using %d instead of %zu for sizeof
  • Thinking sizeof needs variable initialization
  • Missing semicolon (actually present)
5. You want to store 1000 integers in an array on a 32-bit system. If int is 4 bytes, how much memory in bytes will the array consume?
hard
A. 2000 bytes
B. 1000 bytes
C. 4000 bytes
D. 8000 bytes

Solution

  1. Step 1: Identify size of one integer

    On a 32-bit system, int typically uses 4 bytes.
  2. Step 2: Calculate total memory for 1000 integers

    Total memory = number of elements x size of each element = 1000 x 4 = 4000 bytes.
  3. Final Answer:

    4000 bytes -> Option C
  4. Quick Check:

    1000 x 4 = 4000 bytes [OK]
Hint: Multiply count by size of int (4 bytes) [OK]
Common Mistakes:
  • Using size 2 bytes for int
  • Multiplying by 8 bytes (double size)
  • Confusing bits with bytes
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard