开发者

Objective-C const NSString * vs NSString * const

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 definit开发者_运维知识库ions. 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?


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;


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜