In C, we cannot use & to find out the address of a register variable but in C++ we can do the same. Why is it legal in C++ but not in C? Can someone please explain this concept in-depth. Here's an excerpt from Section 6.7.1 (footnote 101) of the C99 standard (pdf) : The implementation may treat any register declaration simply as an auto declaration. However, whether or not addressable storage is actually used, the address of any part of an object declared with storage-class specifier register cannot be computed , either explicitly (by use of the unary & operator as discussed in 6.5.3.2) or