I know that pointer arithmetic is disallowed for null pointers. But imagine I have something like this:
class MyArray {
int *arrayBegin; // pointer to the first array item, NULL for an empty array
unsigned arraySize; // size of the array, zero for an empty array
public:
int *begin() const { return arrayBegin; }
int *end() const { return arrayBegin + arraySize; } // possible? (arrayBegin may be null)
Is it possible (allowed) to have the above end()
implementation? Or is it necessary to have:
int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }
to avoid pointer arithmetic with nullptr because arrayBegin
is null for an empty array (despite arraySize
also being zero in this case)?
I know it's possible to store int *end;
instead of unsigned size;
and let size be computed as end-begin
- but then comes the same issue: Is it allowed to compute nullptr - nullptr
?
I would especially appreciate standard references.
Essentially they are the same but '\0' is for characters as opposed to null which is the idea and representation that an object has yet to be defined/set to a meaningful value.
You can assign 0 into a pointer: ptr = 0; The null pointer is the only integer literal that may be assigned to a pointer.
It is safe to free a null pointer. The C Standard specifies that free(NULL) has no effect: The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation.
All pointers, when they are created, should be initialized to some value, even if it is only zero. A pointer whose value is zero is called a null pointer.
Yes, you can add zero to the null pointer and subtract one null pointer from another. Quoting Additive operators [expr.add] section of the C++ standard:
When an expression
J
that has integral type is added to or subtracted from an expressionP
of pointer type, the result has the type ofP
.
- If
P
evaluates to a null pointer value andJ
evaluates to 0, the result is a null pointer value.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With