Thanks everyone for all those many reactions.
The only question i still have is: Is the whole explaination about the house
and the adress only of use with pointers to functions and arrays, or with normal int variables to?
(because a pointer to an int is 4 bytes and an int variable to)
thanks!
If you use that int as an address of some sort, then yes, the analogy of a house and address can be just as relevant to an int as it can to a pointer.
For example, if you have an array of 100 items, and an int that refers to the index in the array of the item most recently selected, then it is behaving like a reference to some other piece of data. It's as if you already know which street the house will be on (this is the array of 100 items), and now you simply need to know which of those 100 houses is the one you're interested in at the moment (this is the int index). There may be many other streets, but they serve other purposes. If you don't know which street contains the item you're looking for, then just having an array index won't help you. ("I'm looking for the fifth item, but the fifth item in which array?")
Pointers are sort of like global addresses, however, and don't care about which street a house is on. ("I'm looking for the seven hundred and sixteenth house in the world.") A basic array in C++ can in fact behave very much like a pointer. If an array is like a single street with multiple houses, using it like a pointer is like getting the global address of the very first house on the street. ("The first house on this street is the three hundredth house in the world.") If you want to access the very first house, you just use that address directly. If you want to access the fifth house on that street (which would be four houses down from the first house), you just take the address of the first house, and add four to it. That will give you the global address of the fifth house on that street: It is the three hundred and fourth house in the world. Something like this is in fact what your code is actually doing whenever you access an array using an int index.
There are other ways that an int could serve as a reference. If you research hash tables, you'll discover that an int can be used as a way to quickly find an item. It's typically referred to as a "key", but in this case it works very similarly to an address. It is a small piece of information that allows you to quickly find the full data to which it refers.
Hash tables pretty much only use some kind of int for their keys, but other data structures can use a wide variety of types as their keys. Strings can be used, pretty much in exactly the same way as you might look a word up in a dictionary. Two-dimensional vectors might be used as keys to look up which items are stored in a particular cell of a 2D grid, given an (x, y) location.
So the house/address analogy works for a lot of different situations. The curious aspect about pointers specifically is that the there is only one street in the entire world, it is very very long, and all the houses are only on one side of the street. The addresses theoretically start at 0, and increase by 1 until you reach the end of the street (the maximum amount of memory available)*. Other systems of houses and addresses might not be so simply organized. A dictionary can still be ordered alphabetically, but there may be large gaps between one word and the next. A hash table doesn't even have a well-defined concept of order; as you walk along its street, the addresses might go 3083, 95, 40382, 8593... There is a system that organizes it all, but it's not obvious to a casual human observer.
* Side note about pointers and the very long street: Modern operating systems and CPUs do a bunch of work that provide us with this rather simple view of memory. But it's not really a technically accurate view about what's actually going on in memory and in the hardware. In general, you shouldn't need to worry about this at all. But you might encounter patterns with pointer values that seem odd, or at some point you might need to delve into some more serious systems programming. In such cases, being aware that there is a deeper layer of complexity regarding pointers and addresses will help you avoid temporary confusion, and provide you a direction for research. "Virtual memory" would be the primary term to search for.
"We should have a great fewer disputes in the world if words were taken for what they are, the signs of our ideas only, and not for things themselves." - John Locke