欢迎来到@一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力
对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:3329759426@qq.com 。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。
专栏:
文章概述:对 类型修饰符&基本运算符的介绍
关键词:类型修饰符&基本运算符
本文目录:
类型修饰符
- 对大类型进行细化, short long signed unsigned
- const 常量,
- volatile 不要进行自动优化
存储修饰符
- auto 默认的类型,称为:自动变量、栈变量、局部变量 c++17 已经把 auto 挪为他用,不再是类型修饰符
- register 直接放寄存器中,速度快。c++17 开始废弃
- static 修饰,静态空间,与全局变量同在
- extern 跨文件的伪声明
并不分配内存,只是告诉编译器,全局变量会在另一个地方声明
内存的类型
程序分配的内存,主要在“栈”和“堆”这两部分。“堆”比“栈”复杂
- 只读代码: 存代码,也包括立即数,以及定常资源
- 静态空间: 存放static变量,全局变量,常量
- 栈区(stack): 自动变量,函数执行时的上下文环境
- 堆(heap): 程序运行中,动态地申请及归还
- 堆和栈的比较
比较项目 | 栈 | 堆 | 说明 |
谁来管理 | 自动申请,自动释放 | 程序员代码申请,代码释放 | |
时间特性 | 后申请的,必然先释放 | 没有限制 | |
空间特性 | 所有申请的空间都是连续在一起的 | 空间上没有规律 | 可能产生能“碎片” |
大小限制 | 有大小限制,默认2M | 大小理论上没有限制 | |
响应速度 | 很快 | 较栈慢 | |
常见错误 | 栈溢出 | 悬挂指针,内存泄漏 | 栈的大小可设置 |
优美的栈
后进先出的结构(LIFO)
对比:heap 是什么结构? 自由进出
- 栈能实现沿着原路返回的功能
想一想: 很多人爬山,山脚下堆放衣服,回来拿衣服的时,怎样不会纠缠在一起??
- 特点是:自动分配,自动释放
- 缺点: 栈溢出 stackoverflow
基本运算符
a+b, *p = x->f() * 12;
本质上说,运算符就是一种函数,只是表现形式更加人性化
目的概念
目就是参加运算操作数的个数
- 主要有单目,双目,三目(只有一个运算符)
- 同一运算符也可以有多目
a-b 和 -a
称为运算符的重载形式 - 运算符有优先级和结合律
优先级 | 运算符 | 结合性 |
算数运算符
- 整除,求余
试一试: 如何让 a 不断重复 0 1 2 0 1 2 ...
思考题:a, b 是两个月份值,求 a 月 到 b 月,距离多少个月?
- 浮点运算有舍入误差
- 字符型可以参与整数的运算
试一试: 把小写字母转为大写字母
关系运算符
大于,小于,等于,不等于 。。。
不同类型的数比较---陷阱! 浮点数精确比较---陷阱!
逻辑运算符
表示:与 或 非 的概念
&& || !
- 注意优先级: !a&&b的意思是:
(!a) && b
,而不是:!(a&&b)
a || b && c 的意思是:a || (b && c)
, 而不是:(a||b) && c
- 逻辑运算符有短路求值特性,当心!
其它
- 赋值
=
本身是个运算符,结合律:右结合 所以才有:a = b = c; 意思是: a = (b = c) ( )
是运算符,它的意思是强制转换,有可能丢失精度 如何取:天花板?地板? 3.5 -> 3 3.5 -> 4 如何四舍五入?- 还有很多高级的运算符,后续用到再讲