objectiveC【语法】修饰符 static extern const

const

const最好理解,修饰的东西不能被修改
指针类型根据位置的不同可以理解成3种情况:

I 常量指针

// 初始化之后不能赋值,指向的对象可以是任意对象,对象可变。
NSString * const pt1;

II 指向常量的指针

// 初始化之后可以赋值,即指向别的常量,指针本身的值可以修改,指向的值不能修改
const NSString * pt2;

III 指向常量的常量指针

const NSString *  const pt3;

extern

等同于c,全局变量的定义
//x .h 声明
extern const NSString * AA;
//x .m 定义
const NSString * AA = @"abc";
// 调用
#import "x.h"
或者再次申明
extern const NSString * AA;

static

等同于c,将变量的作用域限定于本文件?
不同于java C++里面的类变量,oc没有类变量

疑问

[cpp] view plaincopy
  1. static const NSString * const ChatWindow_STR_TITLE_INDEX[] = {
  2. @"msg_type_all",
  3. @"msg_type_area",
  4. @"msg_type_PM",
  5. @"msg_type_team",
  6. @"guild_title",
  7. @"msg_type_system",
  8. @"msg_type_world"
  9. };

我在.h文件里定义一个static变量,

I .h初始化

在不同的.m里调用都有值,这些值是否同一个对象?

【不同的对象】

II .m里初始化(or赋值)

初始化的值只在.m文件里有效果,即等同于c,将变量的作用域限定于本文件

其他.m文件调用的值都没有赋值。

【不同的对象】

结论

static

// static变量属于本类,不同的类对应的是不同的对象

// static变量同一个类所有对象中共享,只初始化一次

const

// static const变量同static的结论I,只是不能修改了,但是还是不同的对象

// extern const变量只有一个对象,标准的常量的定义方法

// extern的意思就是这个变量已经定义了,你只负责用就行了

1 void main(){
 2     char *str1={"Hello"};
 3     char *str2={"Hello World"};
 4     char * const ptr1 =str1 ;
 5     //指针常量--指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化
 6 
 7     ptr1 =str2; //错误 因为这是一个常量指针,改变指向的地址了
 8 
 9     printf("%s \n",*ptr1);
10     }
11 
12 
13 // 编译错误    error C3892: 'ptr1' : you cannot assign to a variable that is const    
14 

第二个

 1 void main(){
 2     char *str1={"Hello"};
 3     char *str2={"Hello World"};
 4     char * const ptr1 =str1 ;
 5     //指针常量--指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化
 6 
 7     *ptr1 ='A';// 正确 因为指向的地址的内容是可以变化的
 8 
 9     printf("%c \n",*ptr1);
10     }
11 
12 //输出  A
13 

第三个

 1 void main(){
 2     char *str1={"Hello"};
 3     char *str2={"Hello World"};
 4     const char *ptr1 = str1;
 5     //常量指针--指向字符串常量,所指向的字符串内容不能变,但是指向的地址可以变化
 6     
 7     ptr1=str2;// 正确 因为指向的地址是可以变化的
 8 
 9     printf("%s \n",ptr1);
10     }
11 
12 //输出 Hello World

第四个

 1 void main(){
 2     char *str1={"Hello"};
 3     char *str2={"Hello World"};
 4     const char *ptr1 = str2;
 5     //常量指针--指向字符串常量,所指向的字符串内容不能变,但是指向的地址可以变化
 6     
 7     ptr1='A';// 错误 因为指向的地址是内容是不可以变化的
 8 
 9     printf("%c \n",ptr1);
10     }
11 
12 
13 //编译错误    error C2440: '=' : cannot convert from 'char' to 'const char *'

IOS-objectiveC【语法】修饰符 static extern const相关推荐

  1. ArcGIS AddIN开发异常之--修饰符“static”对该项无效

    修饰符"static"对该项无效, 修饰符"internal"对该项无效. 该异常弹出的位置为Config.Designer.CS文件中相关插件的声明附近 in ...

  2. 【java基础面向对象】方法的重写、 package和import包、访问控制修饰符,static,final,static final,抽象方法

    目录 1. 方法的重写(override/overriding):重新写.覆盖 2. package和import: 3. 访问控制修饰符:-----------------------保护数据的安全 ...

  3. 修饰符static、final、abstract与接口

    前言:在易途学习的第十二天,时时刻刻提醒自己不要忘了来这里的目的,学好技术,2017年6月份找到一份满意的工作 面向对象高阶特征 访问权限修饰符 private:私有的 只有本类当中可以访问(defa ...

  4. register,static,extern,const,typedef,volatile关键字

    一.register 用register修饰的作用: 请求编译器尽可能(CPU寄存器资源有限)将变量的值保存在CPU内部寄存器中,省去了CPU从内存中抓取数据的时间,提高了程序的运行效率. 何时用re ...

  5. Java学习之路-----Java基础简介,基础语法,Java标识符,修饰符,关键字与注释

    这里写目录标题 Java简介 Java发展历程 Java语言平台版本 Java语言的特点 Java语言跨平台原理--JVM JRE和JDK JDK安装路径下的目录解释 Java基础语法 Java标识符 ...

  6. 关于static修饰符

    一.类的 static 数据成员 1. 类的 static 数据成员必须在类外部进行初始化. class Test             {               public: ... .. ...

  7. charat越界返回什么_Java基本语法方法修饰符返回类型参数列表异常列表

    方法[method name] 定义 方法[method]是类的成员之一,(因为在java中,方法不能单独定义,它必须在类之中). 修饰符 返回类型 方法名()[throws 异常类型]{ //方法体 ...

  8. JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配

    JAVA基础-栈与堆,static.final修饰符.内部类和Java内存分配 发布时间: 2013/01/12 22:29 QQ空间 新浪微博 腾讯微博 人人网 豆瓣网 百度空间 百度搜藏 开心网 ...

  9. 10.0_[Java 封装]-抽象/封装/构造/重载/ static 修饰符

    ################################################## 目录 抽象编程 面向对象设计的过程 类和对象的关系 为什么使用面向对象 this 关键字 类的成员 ...

  10. private static final 修饰符

    java修饰符分类修饰符字段修饰符方法修饰符根据功能同主要分下几种 1.权限访问修饰符 public,protected,default,private,四种级别修饰符都用来修饰类.方法和字段 包外 ...

最新文章

  1. eclipse中代码没错但项目名称有个小红X
  2. 浅谈 Python 的 with 语句
  3. Leetcode 215. 数组中的第K个最大元素 解题思路及C++实现
  4. Condition中的transferForSignal()方法的不解
  5. Linux LVM与磁盘配额详解
  6. load styles.php,wordpress后台管理超时没反应:load-scripts.php载入缓慢出错
  7. html 语义化标签拾遗
  8. 下拉框_jQuery 美化界面的下拉框
  9. mysql 终端模拟_mysql客户端模拟脏读、幻读和可重复读
  10. Experimental-work1
  11. C语言的预编译,程序员必须懂的知识!【预编译指令】【预编译过程】
  12. Linux中的sed命令
  13. POST 一张 图像的调试来认识 http post
  14. python---python3 获取当前路径及os.path.dirname的使用;os.path.abspath(__file__)用法及意义
  15. vs 生成get set_使用EasyCode+Lombok快速生成增删查改的代码
  16. 检测本计算机的IP地址,告诉您如何使用命令检查本地IP地址
  17. 通过Redis实现数据的交集、并集、补集
  18. 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2022-11-22)
  19. hive与impala相关
  20. neo4j安装_Neo4J OGM与Quarkus

热门文章

  1. 【代码笔记】RRDNet 网络
  2. Unity渐进式GPU烘焙找不到显卡
  3. sketchup草图家具拆单软件 有屋 衣柜橱柜 全屋定制 设计渲染生产一体化SU
  4. (转)74系列芯片使用汇总
  5. ildasm ilasm
  6. 干货---ARCGIS拓扑规则说明详细讲解
  7. JNI 调用 DLL
  8. 【模拟电路知识】运算放大器没有反馈电路——做电压比较器应用
  9. ReportMachine脚本控制背景色
  10. OpenWrt官方入门手册