Back to C Programming
2026-07-136 min read

Example 3: Using sizeof with Array (C Programming)

Learn Example 3: Using sizeof with Array (C Programming) step by step with clear examples and exercises.

Why This Matters

In this C programming lesson, we delve into the intricacies of using the sizeof operator with arrays. Understanding and mastering this concept is crucial for writing efficient code, debugging, and tackling real-world coding challenges or interviews.

Prerequisites

To fully comprehend this lesson, you should have a strong foundation in:

  1. C programming basics
  2. Variables and data types
  3. Arrays (basic understanding)
  4. Pointers (basic understanding)
  5. Basic input/output operations using scanf() and printf()
  6. Understanding of memory allocation functions such as malloc() and calloc()
  7. Basic concepts of structure and unions

Core Concept

The sizeof operator in C is a unary operator that returns the size of its operand in bytes. It serves an essential role when working with arrays, enabling us to determine their size at runtime or calculate memory usage for dynamic data structures.

In the context of arrays, sizeof operates on the array name itself, not individual elements. This means it will return the total number of bytes occupied by the entire array.

int arr[5];
size_t size = sizeof(arr); // size equals 20 (on a 32-bit system)

In this example, arr is an array of 5 integers, and sizeof(arr) returns the number of bytes required to store the entire array. The actual size may vary depending on the system architecture (32-bit or 64-bit).

Array Size Calculation

To calculate the exact number of elements an array can hold, we can use the following formula:

size_t arrSize = sizeof(arr) / sizeof(arr[0]); // calculates the total number of elements in the array

In this expression, sizeof(arr) returns the total number of bytes occupied by the entire array, and sizeof(arr[0]) gives us the size of a single element. By dividing these two values, we can determine the exact number of elements the array can hold.

Worked Example

Let's create a more complex program that demonstrates using sizeof with arrays:

#include <stdio.h>

int main() {
int arr[5] = {1, 2, 3, 4, 5};
size_t arrSize = sizeof(arr) / sizeof(arr[0]); // calculate array size
printf("Array size: %zu\n", arrSize); // print array size
printf("First element: %d\n", arr[0]); // print first element

char str[] = "Hello, World!";
size_t strLen = strlen(str); // calculate string length
printf("\nString length: %zu\n", strLen); // print string length

float pi = 3.14159265358979323846f;
size_t piSize = sizeof(pi); // calculate the number of bytes required to store a single float
printf("\nFloat size: %zu\n", piSize); // print float size in bytes

return 0;
}

In this example, we create an array arr of 5 integers and initialize it with values. We then calculate the array's size using sizeof(arr) / sizeof(arr[0]). Furthermore, we define a character string str, calculate its length using strlen(), and determine the size of a single float variable (piSize).

Finally, we print the calculated sizes and lengths using printf(). Compile and run this code to see the output.

Common Mistakes

  1. ### Forgetting to calculate array size correctly
int arr[5];
size_t size = sizeof(arr); // incorrect calculation: size equals 4 (on a 32-bit system)

In this example, the sizeof(arr) returns the number of bytes required to store the array's address and its size, not just the size itself. To get the actual array size, we should divide by sizeof(arr[0]).

  1. ### Using sizeof incorrectly with individual elements
int arr[5] = {1, 2, 3, 4, 5};
size_t size = sizeof(arr[0]); // returns the number of bytes required to store a single integer (not the array size)

In this example, sizeof(arr[0]) returns the number of bytes required to store a single integer, not the total number of bytes occupied by the entire array. To get the array size, we should use sizeof(arr) / sizeof(arr[0]).

  1. ### Misusing sizeof with structures and unions
struct Person {
char name[50];
int age;
};

struct Person p;
size_t pSize = sizeof(p); // returns the number of bytes required to store a single struct (not the size of each field)

In this example, sizeof(p) returns the total number of bytes required to store the entire structure, but it doesn't provide information about the sizes of individual fields. To get the size of each field, we can use offsetof(), which calculates the offset of a specific field within the structure.

  1. ### Misusing sizeof with multidimensional arrays

When working with multidimensional arrays, it's essential to note that sizeof will only return the size of the first dimension (the number of bytes required to store the base address and the size of the first dimension). To get the total memory usage, you should multiply the sizes of each dimension.

int arr[3][4];
size_t arrSize = sizeof(arr) / sizeof(arr[0]); // returns 12 (on a 32-bit system)
size_t elementSize = sizeof(arr[0][0]); // returns 4 (on a 32-bit system)
size_t totalSize = arrSize * elementSize; // returns the actual size of the array

In this example, we have a 3x4 multidimensional array. To get the total memory usage, we first calculate the number of bytes required to store the entire array using sizeof(arr) / sizeof(arr[0]). Then, we determine the size of a single element (elementSize). Finally, we multiply these two values to get the actual size of the array.

Practice Questions

  1. Write a program that calculates and prints the sizes of arrays of different data types (char, int, float, etc.) and structures.
  2. Given an array of integers, write a function that returns the total number of elements greater than a specific value. Use sizeof to determine the array size.
  3. Write a program that allocates memory for an array using malloc() and calculates its size using sizeof.
  4. Write a program that creates a structure representing a student with fields for name, age, and GPA. Calculate and print the sizes of each field and the total size of the structure.
  5. Given a multidimensional array, write a function that returns the total number of elements in the array using sizeof.

FAQ

In C, sizeof operates on the type of its operand, not on individual elements. To get the size of an array element, you should use sizeof(type), where type is the data type of the array elements.

### What happens if I try to calculate the size of a multidimensional array using sizeof?

When working with multidimensional arrays, it's essential to note that sizeof will only return the size of the first dimension (the number of bytes required to store the base address and the size of the first dimension). To get the total memory usage, you should multiply the sizes of each dimension.

### Can I use sizeof with pointers?

Yes, sizeof can be used with pointers to determine their size in bytes. However, it's important to remember that the size of a pointer will vary depending on the system architecture (32-bit or 64-bit).

### Can I use sizeof with structures and unions?

Yes, you can use sizeof with structures and unions to determine their total size in bytes. However, as mentioned earlier, it doesn't provide information about the sizes of individual fields. To get the size of each field, we can use offsetof().