devxlogo

Assigning a Zero Value to All Members of a Struct

Assigning a Zero Value to All Members of a Struct

Sometimes you need to clear all the members of a struct after it was used. With large structs, you usually use memset() for that purpose. However, for smaller structs that occupy 2, 4 or 8 bytes of memory, calling memset() is rather expensive in terms of performance:

   struct Date  {    char day;    char month;    short year;  }; // Date occupies 4 bytes  Date d;  d.day = 13; d.month = 4; d.year = 2000; // use d  memset(&d, 0, sizeof (d)); // now clear it

You can avoid the overhead of calling memset() by using the following technique instead:

     // convert a pointer to d to a pointer to int  int * pfake = reinterpret_cast  (&d); // 1    // assigns all d's members to zero through fake ptr  *pfake = 0; // 2

The first line of code creates a pointer to int (assuming 32-bit int size) that actually points to a Date object, d. Of course, cheating is necessary to convince the compiler to accept this conversion. This is why reinterpret_cast is used. The second line dereferences that fake int pointer and writes the value 0 to its memory block. This ensures that all the bits in d are set to zero.

You can perform this two-step operation in a single statement like this:

   *( reinterpret_cast  (&d) ) = 0;

However, this is less readable and more error prone.

devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist