const
const最好理解,修飾的東西不能被修改
指針類型根據(jù)位置的不同可以理解成3種情況:
//?初始化之后不能賦值,指向的對象可以是任意對象,對象可變。
NSString * const pt1;
// 初始化之后可以賦值,即指向別的常量,指針本身的值可以修改,指向的值不能修改
const?NSString?* pt2;
const?NSString?* ?const pt3;
等同于c,全局變量的定義,
//x .h 聲明
extern const NSString * AA;
//x .m 定義
const NSString * AA?= @"abc";
// 調(diào)用
#import "x.h"
或者再次申明
extern const NSString * AA;
等同于c,將變量的作用域限定于本文件?
不同于java C++里面的類變量,oc沒有類變量
我在.h文件里定義一個static變量,
在不同的.m里調(diào)用都有值,這些值是否同一個對象?
【不同的對象】
初始化的值只在.m文件里有效果,即等同于c,將變量的作用域限定于本文件
其他.m文件調(diào)用的值都沒有賦值。
【不同的對象】
?// static變量屬于本類,不同的類對應的是不同的對象
? ??// static變量同一個類所有對象中共享,只初始化一次
? ??// static const變量同static的結(jié)論I,只是不能修改了,但是還是不同的對象
?// extern const變量只有一個對象,標準的常量的定義方法
?// extern的意思就是這個變量已經(jīng)定義了,你只負責用就行了
?voidmain(){
?? ?char?*str1={"Hello"};
?? ? char?*str2={"Hello?World"};
? ? char?*?const?ptr1?=str1?;
? ? //指針常量--指針本身是常量,指向的地址不可以變化,但是指向的地址所對應的內(nèi)容可以變化?6??7?????ptr1?=str2;?//錯誤?因為這是一個常量指針,改變指向的地址了?8??9?????printf("%s?\n",*ptr1);
?}
?//編譯錯誤????error?C3892:?'ptr1'?:?you?cannot?assign?to?a?variable?that?is?const
?voidmain(){
? char?*str1={"Hello"};
? char?*str2={"Hello?World"};
? char?*?const?ptr1?=str1?;
? //指針常量--指針本身是常量,指向的地址不可以變化,但是指向的地址所對應的內(nèi)容可以變化 ? ?*ptr1?='A';//?正確?因為指向的地址的內(nèi)容是可以變化的 printf("%c?\n",*ptr1);
}
//輸出??A
?voidmain(){
? ? ?char?*str1={"Hello"};
? ? char?*str2={"Hello?World"};
? ? const?char?*ptr1?=str1;
? //常量指針--指向字符串常量,所指向的字符串內(nèi)容不能變,但是指向的地址可以變化 ? ? ptr1=str2;//?正確?因為指向的地址是可以變化的 ? ? printf("%s?\n",ptr1);
}
//輸出?Hello?World
?voidmain(){
? ? char?*str1={"Hello"};
? ? char?*str2={"Hello?World"};
? ?const?char?*ptr1?=str2;
? ?//常量指針--指向字符串常量,所指向的字符串內(nèi)容不能變,但是指向的地址可以變化 ? ? ptr1='A';//?錯誤?因為指向的地址是內(nèi)容是不可以變化的 ? ? printf("%c?\n",ptr1);}
//編譯錯誤????error?C2440:?'='?:?cannot?convert?from?'char'?to?'const?char?*'