iOS:const的使用
show me the code
首先摆出代码:
int main() {@autoreleasepool {int a = 10;const int *p = &a;int const *p2 = &a;int * const p3 = &a;int b = 20;*p = 12;p = &b;*p2 = 12;p2 = &b;*p3 = 12;p3 = &b;printf("%d",*p);printf("%d",*p2);printf("%d",*p3);}
}
问:最后输出结果是?
答案:
I can BB
const 关键字在 iOS 中的意义是:
- 修饰变量,不修饰其他关键字;
- 被修饰的部分不可变;
- 但是不会改变变量的作用域和生命周期。
情况1:
const int *p = &a
此时 const
修饰的是 *p
。
*p
的意义是指针所指向的内存地址的值,所以此时的意思是指针 p
所指向的内存地址的值不可变!!而指针 p
的值,也就是其指向的内存地址可变;
所以当尝试使用 *p
改变被 const
修饰的常量时,编译器报错,只读的变量不可以被再次赋值,而修改指针 p
的指向时是可行的。
情况2:
int const *p = &a;
const
不修饰关键字,此时const修饰的仍然是 *p
,同情况1;
情况3:
int *const p = &a;
此时 const
修饰的是变量 p
,也就是局部变量 p
的值不能被改变,所以当尝试使用 *p
改变 p
所指向的内存地址a
中的值时,是可行的。但是当尝试重新给 p
赋值,让其指向 b
的内存地址时,编译器报错。
情况4:
int const c = 10;
const int c = 10;
这中情况同情况一和情况二一样,都是修饰变量 c
,也就不存在指针那么复杂的情况,其意义就是变量 c
的值不可变。
const和宏
const编译时确定,如果出错,编译器会报错;
宏是预编译,只做拷贝操作,不会报错;
const不能定义函数;
宏可以定义函数
总结
- const 修饰基础数据时表示变量不可变;
- 修饰指针时,可以分为修饰
const *p
和* const p
,两种情况。前者表示指针所指向的内存地址的值不可变,后者表示指针的指向不可变;
iOS:const的使用相关推荐
- H5页面适配iOS、Android和微信
前言 本文章针对H5开发的单页全屏无滚动页面. 解决方案 整体采用vw.vh作为基本单位,采用flex布局,针对字体使用rem单位. 多终端适配 针对app包下载等业务场景,需要识别对应的终端,采用不 ...
- web移动端安卓和ios兼容问题
1.click300ms延迟 fastclick可以解决在手机上点击事件的300ms延迟 触摸事件的响应顺序为 touchstart --> touchmove --> touchend ...
- 判断当前系统是 安卓还是ios
// 判断是否是 安卓 const isAndroid = () => {const u = navigator.userAgent;return u.includes('Android') | ...
- 判断浏览器是否是微信,判断手机是安卓还是ios
1.判断手机是安卓还是ios const u = navigator.userAgent; const iOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) ...
- taro 引入js_Taro跨端开发之多业务模块管理 React Native篇(终篇)
React Native 热更新方案 rn的业务越来越庞大,同时协同的团队越来越多. rn的动态化就必须提上日程了. 对于rn热更新,首当其冲的问题就是分包. rn的基础库很大,再加上我们依赖了很多的 ...
- react-native 集成极光推送jpush-react-native时的小问题
android的一个报错 ... set canOverrideExistingModule=true 解决: 问题是在/android/app/src/java/.../MainApplicatio ...
- js 正则是否包含某些字符串_我从Vue源码中学到的一些JS编程技巧
在我们面试的过程中,经常会遇到问源码的环节,因为优秀的框架通常都会包含很多设计理念跟编程实践.这段时间我一直在看Vue2的源码,发现了很多有意思的实现.虽然现在Vue3都已经发布了,也无法否认Vue2 ...
- js正则匹配闭合标签_我从Vue源码中学到的一些JS编程技巧
在我们面试的过程中,经常会遇到问源码的环节,因为优秀的框架通常都会包含很多设计理念跟编程实践.这段时间我一直在看Vue2的源码,发现了很多有意思的实现.虽然现在Vue3都已经发布了,也无法否认Vue2 ...
- cocos android 剪切板,Cocos Creator 点击按钮复制到剪切版
建一个ts文件,js文件不行,复制下面的代码,在场景中给button绑定事件 // Learn TypeScript: // - https://docs.cocos.com/creator/manu ...
- uni-app 跳转支付宝小程序以及带参
if(this.pepoplres.platform == 'ios') { const query = encodeURIComponent('要带的参数') 例如:'?order_id=' + t ...
最新文章
- 8.2 高斯分布模型-机器学习笔记-斯坦福吴恩达教授
- 阿里开源富容器引擎 PouchContainer 的 network 连接机制
- 最新版FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用简解(提供博客园本地下载)
- 老年计算机音乐,老年音乐影集相机V1.2.5
- Vue内容分发slot
- CString LPCTSTR LPTSTR 类型的相互转化
- SPOJ NSUBSTR(后缀自动机)
- GitHub For Beginners: Don’t Get Scared, Get Started
- 【逐云】阿里“水电煤”背后的人物故事
- “37岁,985毕业,年薪50万,被裁掉只用了10分钟”
- PLC1200配方功能使用---配方功能快速入门
- colmak键盘_萌神进化 IKBC 新POKER2机械键盘体验
- php接入钉钉注册回调
- Linux文件锁内核VFS层源码实现讲解
- 深入理解Camera基础知识点
- Linux 与 Python编程2021 顺序与选择结构 educoder实训
- 了解sentinel
- 干货|多层穿梭式货架立柱设计细节
- 软件方法——业务建模和需求(好书推荐)
- 电力拖动控制系统作业答案3