deine const 等关键字区别
define
属于预编译指令,在程序运行之前就已经编译好;额,定义变量,没有类型信息,
const
修饰的变量是不可变的,只是给出了内存地址,且只在程序运行时初始化开辟一块内存空间
const 只修饰右边部分 右边部分表示只读
int const *p; // *p:指针变量
//可以修改值,但不能修改地址
int a = ;
int b = ;
int const *p = &a;
NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a);
p = &b;
NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a); // const修饰变量
int * const p; // p:常量
//只能修改p的地址 不能修改p 的值
int const *p = &a;
NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a);
*p = b;
NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a);
extern
extern用来修饰全局变量。extern用在变量声明中常常有这样一个作用
使用如:
.h 文件中声明
extern NSString * const kTTTStrikeOutAttributeName;
.m 文件中
NSString * const kTTTStrikeOutAttributeName = @"TTTStrikeOutAttribute";
FOUNDATION_EXPORT:
FOUNDATION_EXPORT double TTTAttributedLabelVersionNumber;
类似define,区别在于这种方法在检测字符串的值是否相等的时候更快.对于第一种你可以直接使用(stringInstance == MyFirstConstant)来比较,而define则使用的是这种.([stringInstance isEqualToString:MyFirstConstant])
参考链接:http://www.jianshu.com/p/f547eb0368c4
deine const 等关键字区别的更多相关文章
- const int *p与int *const p的区别(转:csdn,suer0101)
本文只是一篇学习笔记,是看了<彻底搞定C指针>中的相关篇幅后的一点总结,仅此而已! 一.先搞清const int *p与int const *p的区别 它们的区别就是:没有区别!! 无论谁 ...
- #define和const的简单区别
面试常问:宏#define和const有什么区别? 1.编译器处理方式 define宏是在预处理阶段展开 const常量是在编译阶段使用 2.类型和安全检查不同 define宏没有类型,不做安全检查, ...
- let、var、const声明的区别
前言 看了方应杭老师的一篇解释let的文章,对JavaScript中的声明有了深刻的理解,这里也就有了总结一下JavaScript中各种声明之间区别的这篇文章. JavaScript中变量声明机制 首 ...
- js中const,var,let区别(转载)
js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ...
- #define宏常量和const常量的区别
C++ 语言可以用const 来定义常量,也可以用#define 来定义常量.但是前者比后者有更多的优点:(1) const 常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查.而 ...
- const 和 #define区别_fenglovel_新浪博客
const 和 #define区别 (2012-12-11 14:14:07) 转载▼ 标签: 杂谈 (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使 ...
- void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别?
void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别? const void fun(){};和void const fun ...
- const,var,let区别(转载)
1.const定义的变量不可以修改,而且必须初始化. const b = 2;//正确 // const b;//错误,必须初始化 console.log('函数外const定义b:' + b);// ...
- C++(十九) — const 和 #define 区别
1.const (1)C++对 const 常量的处理过程:当编译器碰到 常量声明 时,在符号表中放入常量,编译时发现使用常量,则直接以符号表中的值替换. (2)如果,编译中发现,对 const 使 ...
随机推荐
- setTimeout的核心原理和巧用
你所不了解的setTimeout 发表于 2015年11月23日 by 愚人码头 被浏览 14,756 次 分享到: 0 小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue ...
- java错误笔记
错误1. Description Resource Path Location Type The superclass "javax.servlet.http.HttpSer ...
- 对话框窗口最大化盖住任务栏问题!OnGetMinMaxInfo,WM_GETMINMAXINFO
http://hi.baidu.com/csacer/item/37cd6ac2dec18d360831c6a7 在写程序时,如果包含了标题栏,但是没有包含最大化按钮或者最小话按钮,那么人工用Show ...
- Ubuntu下软件的搜索与安装
本文为笔者原创,首发于简书(点击这里查看). 小白玩转linux的第一个拦路虎就是软件的安装了.本文结合自己在Ubuntu14.04下软件安装经验做一个总结. 1.如何搜索软件? apt-cache ...
- selenium的定位
id定位 find_element_by_id()方法通过id来定位元素 例如: find_element_by_id("kw") find_element_by_id(&quo ...
- COGS 2211. [BZOJ3653]谈笑风生
★★★★ 输入文件:laugh.in 输出文件:laugh.out 简单对比时间限制:3 s 内存限制:512 MB [问题描述] 设T 为一棵有根树,我们做如下的定义: • 设a和b ...
- Scroller 界面滑动
Scroller 滑动之后滑动器子标签里面的控件,其自身是不动的.这里点在下面的进阶会体现出来. 1. 继承LinearLayout, 相对布局也可以. public class MyLinearL ...
- iview 表单验证 input 用失去焦点事件 blur, select下拉选框 要用change事件 验证
birthday: [{ required: true, message: '内容不能为空', trigger: 'blur' }],belongDept: [{ required: true, me ...
- go语音实战读后感——一
1.第一个go程序: package main import ( "fmt" ) func main() { fmt.Println("Hello go") } ...
- Django-C002-深入模型,到底有多深
此文章完成度[100%]留着以后忘记的回顾.多写多练多思考,我会努力写出有意思的demo,如果知识点有错误.误导,欢迎大家在评论处写下你的感想或者纠错. ORM介绍:对象关系映射(英语:(Object ...