Objective-C中的const ,extern,static

一.const

1>对于const,记住关键的一点,它只是修饰右边的变量.

例如:

- (void)viewDidLoad {
    [super viewDidLoad];
    // const两种用法
    // const:修饰基本变量p
    // 这两种写法是一样的,const只修饰右边的基本变量b
    const int b = 20; // b:只读变量
    int const b = 20; // b:只读变量
    // const修饰指针变量访问的内存空间,修饰的是右边*p1,
    // 两种方式一样
    const int *p1; // *p1:常量 p1:变量
    int const *p1; // *p1:常量 p1:变量
    // const修饰指针变量p1
    int * const p1; // *p1:变量 p1:常量
    // 第一个const修饰*p1 第二个const修饰 p1
    // 两种方式一样
    const int * const p1; // *p1:常量 p1:常量
    int const * const p1;  // *p1:常量 p1:常量
}

2>对于const的应用场景

//如果我需要一个方法,参数是地址,只能通过地址获取值,不能修改地址

//*a 只读  不能修改*a
- (void)test:(const int *)a{
    a = 20;
}

//如果不能修改a的值,只能修改a访问的值
//a 只读  不能修改a
- (void)test1:(int * const)a{
    *a = 20;
}

3>const和宏的区别

  (1)宏是预编译执行,const是编译执行.

  (2)宏不会做编译检查,它只是做替换,因此不会编译报错;const会编译检查,会编译报错.

  (3)宏能定义方法或函数,const不能.

  (4)大量使用宏会造成编译时间长久.

  (5)注意:大量使用宏并不会消耗很多内存,宏定义的是常量,常量是存放在常量去,只生成一份内存,并不像有些人所说的会消耗很多内存!

二.static和extern

1>static作用:

   (1)修饰局部变量

      1)延长局部变量的声明周期,程序结束才销毁

      2)局部变量只初始化一次,节省内存

      3)改变作用域

     (2)修饰全局变量

      1)只能在本文件中访问,修改全局变量作用域,生命周期不改变

      2)避免重复定义全局变量

2>extern作用:

    (1)只是用来获取全局变量的值,不能用来定义变量

    (2)工作原理是先在本文件中查找有没有全局变量,没有找到的话再去其他文件中查找.

三.static和const一起使用

1>防止重复声明全局变量

2>不希望同事无意中修改变量,只允许读取

3>声明一个静态的全局只读常量

四.extern与const一起使用

1>在多个文件中经常使用同一个字符串常量,用extern和const组合使用

2>一般建一个GlobeConst

时间: 2024-10-19 11:28:14

Objective-C中的const ,extern,static的相关文章

php中的const和static

1.const是类中的常量,类外用define定义常量 (var用来定义类内的变量,有添加控制访问限制的修饰符则可以省略 eq:public protected) 类外: 类外的常量属于全局,任何位置都可以访问,任意函数内部都可以访问外部定义的常量,而且常量一被定义就不可修改或者撤销 类内: 类内的常量属于当前这个类,不属于类的实例对象,因此不能通过$this->访问,同样的常量一被定义就不能修改或者撤销. 类内可以通过 self:: 来访问常量,类外则通过 类名:: 访问 2.const只可以

C/C++中的const ,static

一.const 在C++中: 1.常对象:创建对象时添加const关键字,这个对象就不可以再修改,就有了常属性,就意味着整个对象所有变量不能更改 2.常对象不能调用普通函数,调用成员函数就相当于把对象的this指针给了他,就有被修改的风险 3.常对象只能调用常函数(函数体前加关键字叫常函数),普通对象也能调用常函数,常函数就相当于对this指针添加了const属性 4.常函数与普通函数可以构成重载,不会冲突 5.如果有成员确实需要修改,他又被const修饰,可以对成员添加一个关键字mutable

转 C# const readonly static 比较

[csharp] view plaincopy C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景. 工作原理 readonly为运行时常量,程序运行时进行赋值,赋值完成后便无法更改,因此也有人称其为只读变量. const为编译时常量,程序编译时将对常量值进行解析,并将所有常量引用替换为相应值. 下面声明两个常量: public static readonly int A = 2; //A为运行时常量 p

C语言中关键字auto、static、register、const、volatile、extern的作用

原文:C语言中关键字auto.static.register.const.volatile.extern的作用 关键字auto.static.register.const.volatile.extern 这些关键词都是c++基础知识,我整理了一下,希望对新学的朋友们有用: (1)auto 这个这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多写,因为所有的变量默认就是auto的. (2)reg

(转)全局变量、extern/static/const区别与联系

全局变量.extern/static/const区别与联系 编译单元(模块):     在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌 入式下做开发工作的话,那么你可能非常的理解编译与连接的区别! 当在VC这样的开发工具上编写完代码,点击编译按钮准备生成exe文件时,V

《OOC》笔记(1)——C语言const、static和extern的用法

<OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用const修饰的函数形参 直接修饰 一个形如 int Minus(const int a, const int b, int testCase); 的函数,const的意义是什么呢? 答:参数a被const修饰,说明在Minus函数内,编译器不允许a被别的变量(例如x)赋值(修改).参数b同理. 如果你写了a

c语言修饰符总结const、static、volatile、auto、extern、register

写在前面 今天下午一个同事问「register」关键字是什么作用?噢,你说的是「register」啊,它的作用是--脑袋突然断片儿,我擦,啥意思来着,这么熟悉的陌生感.做C语言开发时间也不短了,不过好像没有用到过「register」,但作用还是知道的,一下子想不起来了,一万个草泥马飞奔过来. 其实C语言中除了register外,还包含常见的const.static.volatile.auto.extern等修饰符,现在一起再总结一下好了. register 修饰符 register,寄存器变量,

extern static const abstract virtual

extern static const abstract virtual const const,常量,初始化过后值不能再变化的变量. extern static const abstract virtual,布布扣,bubuko.com

C++ 中 const 和 static 的作用

目录 const 的主要应用如下: const 关键字使用的注意点: C++中static关键字有三个明显的作用: const的主要应用如下: const 用于定义常量:const定义的常量编译器可以对其进行数据静态类型的安全检查. const 修饰函数形式参数:当输入参数为用户自定义类型和抽象数据类型的时候,将"值传递"改为"const 引用传递" 可以提高效率. const 修饰函数的返回值:如果给"指针传递"的函数返回值加const,则返回