My compiler is g++ 4.7.3

```
long i = 2222;
const long& lref = i;
const int& iref = i;
printf("i=%p lref=%p iref=%p \n", &i , &lref, &iref);

```

The result is 

```
i=0xbfd78760 lref=0xbfd78760 iref=0xbfd78764

```

Why the address of `iref` is higher than `i`

I think it may just like this:
when `const int&` reference to `long`, it like 

```
int temp = i
const int& iref = temp;

```

==========================================================

CODE2

However when the code like 

```
long i = 2222;
const long& lref = i;
const int& iref = i;
int a = 10;
int b = 10;

printf("i=%p lref=%p iref=%p a=%p b=%p\n", &i , &lref, &iref, &a, &b);

```

The result is 

```
i=0xbfade768 lref=0xbfade768 iref=0xbfade774 a=0xbfade76c b=0xbfade770

```

Why the address of `a` and `b` is lower than `iref` in the stack?

==========================================================

CODE3

When the code like 

```
long i = 2222;
const long& lref = i;
const int& iref = i;
printf("i=%p lref=%p iref=%p \n", &i , &lref, &iref);

```

The result is 

```
i=0xbfbe3f84 lref=0xbfbe3f84 iref=0xbfbe3f83

```

When the type of `iref` is `char`,why the address of `iref` is lower than `i`?

Can somebody tell my why, thanks you!