Question: I really can't understand what is the difference here 

```
const int a = 1;
int const a = 1;

```

I know what constants are but the example above confuse me.

Answer: 
There is no difference. Both are same.

Draft n1570: 6.7.2 Type specifiers:
-----------------------------------

> 
> Type specifiers are `void`, `char`, `short`, `int`, `long`, `float`, `double`, `signed`, `unsigned`, `_Bool`, `_Complex`, `<struct-or-union-specifier>`, `<enum-specifier>`, and `<typedef-name>`.
> 
> 
> At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each struct declaration and type name. Each list of type specifiers shall be one of the following multisets (delimited by commas, when there is more than one multiset per item); **the type specifiers may occur in any order**1, possibly intermixed with the other declaration specifiers.
> 
> 
> 

---

1.Emphasis is mine
As others have said, your two code examples are the same.

An easy way to remember how to parse these kinds of expressions is:

* If the `const` appears next to (on either side) a *typename*, as in your example, the `const` binds to the type name.
* Otherwise, the `const` binds to the first pointer to the left of it.

So for example, `int * const p` is a constant pointer to a non-constant `int`, meaning that you can write to the `int` using `p`, but cannot change the value of `p`.

One way of remembering whether a `const` which is not next to a typename binds to the pointer on its left or right side is to consider the fact that expressions of the type `int * const p` are legal, and so the `const` in this expression has to bind to the pointer on the left. You do still need to remember that `const` prefers typenames to pointers.