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];
}
Lessons in this unit:
| 0: | Introduction |
| 1: | Input and output |
| 2: | Variable scope |
| 3: | ▶︎ Static variables |
| 4: | Global variables |
| 5: | Type definitions |
| 6: | Enumerations |
| 7: | Structures |
| 8: | Command line parameters |
| 9: | Header files |
| 10: | The preprocessor |
| 11: | NULL values |
| 12: | Boolean values |
| 13: | Nesting functions |
| 14: | Conversion specifiers |
| 15: | Using quotes |
| 16: | String length |
| 17: | Returning strings |
| 18: | Array length |
| 19: | Looping through arrays |
| 20: | Checking character values |
| 21: | Printing percentage signs |
| 22: | Troubleshooting: Implicit function declarations |