No, it does not. In C, variables have a fixed set of memory addresses to work with. If you are working on a system with 4-byte ints
, and you set an int
variable to 2,147,483,647
and then add 1
, the variable will contain -2147483648
. (On most systems. The behavior is actually undefined.) No other memory locations will be modified.
In essence, the compiler will not let you assign a value that is too big for the type. This will generate a compiler error. If you force it to with a case, the value will be truncated.
Looked at in a bitwise way, if the type can only store 8 bits, and you try to force the value 1010101010101
into it with a case, you will end up with the bottom 8 bits, or 01010101
.
In your example, regardless of what you do to myArray[2]
, myArray[3]
will contain '4'. There is no "spill over". You are trying to put something that is more than 4-bytes it will just lop off everything on the high end, leaving the bottom 4 bytes. On most systems, this will result in -2147483648
.
From a practical standpoint, you want to just make sure this never, ever happens. These sorts of overflows often result in hard-to-solve defects. In other words, if you think there is any chance at all your values will be in the billions, don't use int
.