# Scope of variables in C

> Learn how variable scope works in C: local variables live inside a function on the stack and vanish when it ends, while globals stay available everywhere.

Author: Flavio Copes | Published: 2020-02-22 | Canonical: https://flaviocopes.com/c-variables-scope/

When you define a variable in a [C](https://flaviocopes.com/c-introduction/) program, depending on where you declare it, it will have a different **scope**.

This means that it will be available in some places, but not in others.

The position determines 2 types of variables:

- **global variables**
- **local variables**

This is the difference: a variable declared inside a function is a local variable, like this:

```c
int main(void) {
  int age = 37;
}
```

Local variables are only accessible from within the function, and when the function ends they stop their existence. They are cleared from the memory (with some exceptions).

A variable defined outside of a function is a global variable, like in this example:

```c
int age = 37;

int main(void) {
  /* ... */
}
```

Global variables are accessible from any function of the program, and they are available for the whole execution of the program, until it ends.

I mentioned that local variables are not available any more after the function ends.

The reason is that local variables are declared on the **stack**, by default, unless you explicitly allocate them on the heap using [pointers](https://flaviocopes.com/c-pointers/), but then you have to manage the memory yourself.
