Reputation: 595
I'm trying to a NSString constant in my .h file to be defined in my .m. I understand that
extern NSString * const variableName;
in the .h and
NSString * const variableName = @"variableValue";
is the way to do this. Examining C tutorials I see that const
is supposed to go before variable definitions. My question is why is it not declared as extern const NSString * variableName;
in the .h and const NSString * variableName = @"variableValue";
in the .m. I know this doesn't work because I encounter compiler warnings which say 'Passing argument 1 of methodName: discards qualifiers from pointer target type'. What does this mean?
Upvotes: 48
Views: 17437
Reputation: 53960
It's not the same. The const modifier can be applied to the value, or the pointer to the value.
int * const
A constant pointer (not modifiable) to an integer (its value can be modified)
const int *
A modifiable pointer to a constant integer (its value can't be modified)
So you can imagine:
const int * const;
Upvotes: 64
Reputation: 133
Constant pointer is NOT a pointer to constant. Constant pointer means the pointer is constant. E.g. constant pointer int * const ptr2;
indicates that ptr2
is a pointer which is constant. This means that ptr2
cannot be made to point to another integer. However, the integer pointed by ptr2
can be changed.
Whereas a pointer to constant const int * ptr1;
indicates that ptr1
is a pointer that points to a constant integer. The integer is constant and cannot be changed. However, the pointer ptr1
can be made to point to some other integer.
Upvotes: 6