Inside a function, you can initialize a static variable using the static keyword.

I said “inside a function”, because global variables are static by default, so there’s no need to add the keyword.

What’s a static variable? A static variable is initialized to 0 if no initial value is specified, and it retains the value across function calls.

Consider this function:

int incrementAge() {
  int age = 0;
  age++;
  return age;
}

If we call incrementAge() once, we’ll get 1 as the return value. If we call it more than once, we’ll always get 1 back, because age is a local variable and it’s re-initialized to 0 on every single function call.

If we change the function to:

int incrementAge() {
  static int age = 0;
  age++;
  return age;
}

Now every time we call this function, we’ll get an incremented value:

printf("%d\n", incrementAge());
printf("%d\n", incrementAge());
printf("%d\n", incrementAge());

will give us

1
2
3

We can also omit initializing age to 0 in static int age = 0;, and just write static int age; because static variables are automatically set to 0 when created.

We can also have static arrays. In this case, each single item in the array is initialized to 0:

int incrementAge() {
  static int ages[3];
  ages[0]++;
  return ages[0];
}