What are the default values of static variables in C? (original) (raw)

Last Updated : 14 Apr, 2023

In C, if an object that has static storage duration is not initialized explicitly, then: — if it has pointer type, it is initialized to a NULL pointer; — if it has an arithmetic type, it is initialized to (positive or unsigned) zero; — if it is an aggregate, every member is initialized (recursively) according to these rules; — if it is a union, the first named member is initialized (recursively) according to these rules. For example, following program prints: Value of g = 0 Value of gs = 0 Value of s = 0

Example no 1

C `

#include <stdio.h> int g; // g = 0, global objects have static storage duration static int gs; // gs = 0, global static objects have static // storage duration int main() { static int s; // s = 0, static objects have static // storage duration printf("Value of g = %d", g); printf("\nValue of gs = %d", gs); printf("\nValue of s = %d", s);

getchar();
return 0;

}

`

Output

Value of g = 0 Value of gs = 0 Value of s = 0

Example no 2

C `

#include <stdio.h>

void print_static_vars(void) { static int i = 0; static float f = 0.0; static char c = '\0';

i++;
f += 0.1;
c++;

printf("i = %d, f = %f, c = %c\n", i, f, c);

}

int main() { print_static_vars(); print_static_vars(); print_static_vars();

return 0;

}

`

Output

i = 1, f = 0.100000, c = ☺ i = 2, f = 0.200000, c = ☻
i = 3, f = 0.300000, c = ♥

Explanation