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的使用相关推荐

  1. H5页面适配iOS、Android和微信

    前言 本文章针对H5开发的单页全屏无滚动页面. 解决方案 整体采用vw.vh作为基本单位,采用flex布局,针对字体使用rem单位. 多终端适配 针对app包下载等业务场景,需要识别对应的终端,采用不 ...

  2. web移动端安卓和ios兼容问题

    1.click300ms延迟 fastclick可以解决在手机上点击事件的300ms延迟 触摸事件的响应顺序为 touchstart --> touchmove --> touchend ...

  3. 判断当前系统是 安卓还是ios

    // 判断是否是 安卓 const isAndroid = () => {const u = navigator.userAgent;return u.includes('Android') | ...

  4. 判断浏览器是否是微信,判断手机是安卓还是ios

    1.判断手机是安卓还是ios const u = navigator.userAgent; const iOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) ...

  5. taro 引入js_Taro跨端开发之多业务模块管理 React Native篇(终篇)

    React Native 热更新方案 rn的业务越来越庞大,同时协同的团队越来越多. rn的动态化就必须提上日程了. 对于rn热更新,首当其冲的问题就是分包. rn的基础库很大,再加上我们依赖了很多的 ...

  6. react-native 集成极光推送jpush-react-native时的小问题

    android的一个报错 ... set canOverrideExistingModule=true 解决: 问题是在/android/app/src/java/.../MainApplicatio ...

  7. js 正则是否包含某些字符串_我从Vue源码中学到的一些JS编程技巧

    在我们面试的过程中,经常会遇到问源码的环节,因为优秀的框架通常都会包含很多设计理念跟编程实践.这段时间我一直在看Vue2的源码,发现了很多有意思的实现.虽然现在Vue3都已经发布了,也无法否认Vue2 ...

  8. js正则匹配闭合标签_我从Vue源码中学到的一些JS编程技巧

    在我们面试的过程中,经常会遇到问源码的环节,因为优秀的框架通常都会包含很多设计理念跟编程实践.这段时间我一直在看Vue2的源码,发现了很多有意思的实现.虽然现在Vue3都已经发布了,也无法否认Vue2 ...

  9. cocos android 剪切板,Cocos Creator 点击按钮复制到剪切版

    建一个ts文件,js文件不行,复制下面的代码,在场景中给button绑定事件 // Learn TypeScript: // - https://docs.cocos.com/creator/manu ...

  10. uni-app 跳转支付宝小程序以及带参

    if(this.pepoplres.platform == 'ios') { const query = encodeURIComponent('要带的参数') 例如:'?order_id=' + t ...

最新文章

  1. 8.2 高斯分布模型-机器学习笔记-斯坦福吴恩达教授
  2. 阿里开源富容器引擎 PouchContainer 的 network 连接机制
  3. 最新版FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用简解(提供博客园本地下载)
  4. 老年计算机音乐,老年音乐影集相机V1.2.5
  5. Vue内容分发slot
  6. CString LPCTSTR LPTSTR 类型的相互转化
  7. SPOJ NSUBSTR(后缀自动机)
  8. GitHub For Beginners: Don’t Get Scared, Get Started
  9. 【逐云】阿里“水电煤”背后的人物故事
  10. “37岁,985毕业,年薪50万,被裁掉只用了10分钟”
  11. PLC1200配方功能使用---配方功能快速入门
  12. colmak键盘_萌神进化 IKBC 新POKER2机械键盘体验
  13. php接入钉钉注册回调
  14. Linux文件锁内核VFS层源码实现讲解
  15. 深入理解Camera基础知识点
  16. Linux 与 Python编程2021 顺序与选择结构 educoder实训
  17. 了解sentinel
  18. 干货|多层穿梭式货架立柱设计细节
  19. 软件方法——业务建模和需求(好书推荐)
  20. 电力拖动控制系统作业答案3

热门文章

  1. android edittext不可复制_【EditText】Android设置EditText不可编辑 | 学步园
  2. JVM初识之自定义类加载器
  3. 基于神念TGAM的脑波小车(4)
  4. java中的Map每次只能put一次,写段增强的put,可以一次put很多次
  5. CSS里 @import用法
  6. 重零开始学前端-基础(1) 什么是变量
  7. linux下c程序调用reboot函数实现直接重启【转】
  8. LigerUI权限系统之角色管理
  9. GRUB系统引导器恢复
  10. [2018.11.03 T2] 执行任务