3 ms·
If you're going to be pedantic, it is best to be right. I don't have a copy of the C standard here, but I do have a copy of the C++ standard. From 5.7 Additiv
by mian2zi3 16y ago
If you're going to be pedantic, it is best to be right. I don't have a copy of the C standard here, but I do have a copy of the C++ standard. From 5.7 Additive Operators (discussing an expression of the form P+N, where P has pointer type and N has integral type):
"If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined."
That is, if either P or P+N don't point to the same array object, or one past the end of the array object, the result is undefined. Thus,
int arr[4] = {0, 1, 2, 3};
... arr + 4 ... // OK, points to one past the end of the array object
... arr + 5 ... // undefined
I'm sure the C standard is the same.
- nitrogen 16y agoThis is one instance where C++ and C are, indeed, the same. However, the languages do have their differences, so I would caution those developers who don't tend to read standards not to assume that C and C++ will behave identically when given valid C code. Obviously, having referenced the C++ standard yourself, you are aware of such caveats. 6.5.6.8 from ISO/IEC 9899:201x draft of March 1, 2009: ...If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined....