×
 Introduction
Introduction to Newbie Programmer Series Introduction to Computer The Computer Programming Language Setting up the Computer for Programming
 Lets Get Started !
Beginning C Programming Variables a Handbag ! Basic Variable types in C Basic Formatted Output Basic Formatted Input
 Loops
Looping Repeating Concept Different Kinds of Loops Advanced concepts and trick with Loops
 Operators
Operators, An Introduction Arithmetic Operators Relational Operators Logical Operators Bitwise Operators Miscellaneous Operators and Operators Precedence
 Controlling the Flow
Flow Charts Conditional Statements Using Goto and Label Break and Continue the loops Switch the Cases Some Practical Applications of Control Flow
 The program structure
The program Structure Functions More Concepts of Functions Scope of the Variables across functions How the C language itself Works ? Scope of the Variables across files Static Variables Auto and Register Variables #define PreProcessor Some more PreProcessors
 Arrays and Structures
Introduction to Arrays Arrays, some more Concepts Arrays, Cool Examples Structures Introduction Structure, Some more Concepts Structure, Some Examples
 File Management
Basics of File management in C Steps Involved with File Handling in C
 Miscellaneous
Inside Logic Gates – The Electronic Logic Binary Number System Mathematical Reasoning
Newbie Programmer
full book coming soon
by Shubham Ramdeo

That's how we can make destructive variables, using Static variables !


 

Welcome to the Newbie Programmer Series. In the last post (click here) we have learned how can we use variables across files. we have learned using the 'extern' to make that possible. Lets discuss some more interesting things. So if you are new to this series, please go to index (click here), and read out all the previous parts so that you can easily understand what I am writing about.


So, we are discussing Static Variables. The word "Static" Means "fixed". For an example, content printed on a book is static.

And as the name suggest, Static Variables are those variables which remains "alive" until the program ends.

This is gonna be a long post I think, please continue reading below

The thing is like when we initialize a variable, like int x; Then whenever this variable needs to be used, in the computer's memory, a space is made for a variable x. And when its usage ends, its removed.

Hence each time, variable is created again and then removed.

For example see this piece of code below,

#include <stdio.h>
main()
{
    int i;
    for ( i = 0; i < 3; i++)
    {
        int x = 0;
        x++;
        printf("x = %d \n", x);
    }
}
OUTPUT :
x = 1
x = 1
x = 1
A loop is running three times.
Each time, a variable x is created and assigned a value 0. Then its incremented. i.e added 1 into x.
And then the value is printed. So x was 0, and incremented by 1. So new value of x is 1. So x = 1 is printed.
This loop runs three times so the message is printed three times.
As you can see, in the case like above, when a loop end, the value of x becomes 1. But when the next loop comes up, it's again setup to x = 0. Means every time, variable is created and destroyed and have nothing to do with the previous values.
What we want is to let the computer "remember" the last value. So instead of creating new, we want that computer must check if there is any previous value and if there is, then use the old one.
So in that case, we use static. Which are those variable who do not die !
Its Usage is simple. Whatever you want to make a static variable, just write :
static name ;
So lets change the above program, See this below :
#include <stdio.h>
main()
{
    int i;
    for ( i = 0; i < 3; i++)
    {
        static int x = 0;
        x++;
        printf("x = %d \n", x);
    }
}
OUTPUT :
x = 1
x = 2
x = 3
This time, I have made the "x" variable, a static variable. So now, first loop starts. There was no "x" so a variable "x" is created and assigned a value "0". Then its incremented. Now x = 1. Then the message is printed. Then second loop starts. As it's a static variable, so computer search for any previous value. And so x got its last used value, x = 1. 
Then x is incremented, so now x = 2. Then the message is printed.
Third loop starts. This time, last value was x = 2. So on increment, x becomes 3. And the message x = 3 is printed.
You yourself compare both the above codes. They are exactly same, but one got "int x" and other got "static int x" And you can see it made a huge difference in the outputs !

Some notes regarding Static Variables

Lets discuss some interesting facts regarding static variables.
FUNDAMENTAL RULE : A space of a static variable is created only a once in the computer memory and remain there until the program ends.

You cannot use normal and static variables together. It will cause errors.

So if you are doing things like int x and static int x together, it may create troubles.

Value of a Static Variable is zero or null by default.

We may get some random values on simply declaring like "int x", "float y", "char name" All these might have some random value. But if the variable is declared using static, it will always zero or null by default.

For example :

#include <stdio.h>
main()
{
static int x;
static float y;
static char name;
printf("%d, %f, %c" , x, y, name);
}

OUTPUT :

0 0.000 0

But it does not go back to zero if already has a value.

So for example :

#include <stdio.h>
main()
{
static int x = 5;
static int x;
printf("%d" , x);
}

OUTPUT :

5

At first we declared x = 5 as static. In the next line, we again made a variable. But then according to the previous point, x should become zero but this does not happens as we are using static variable, the last value is saved.

Static Variables follow the scope rules.

So If a static variable is created in a function, its scopes remains in that function. i.e, it cannot be used by any other function. (called as local Variables.)

And if a static variable is created outside any function, then it can be used by any function. (called as global variables)

==

Pretty long post !

So we have discussed a good amount of things. I think that's enough for today. We will discuss the real world applications later, until then, keep reading and stay connected.

 

Please share this as much as you can so that we can get connected with more and more people who want to learn programming.

© Shubham Ramdeo

Site Map
with
© Shubham Ramdeo