1. 数据类型
所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作 数据。 目前只需了解内置类型就可以1.1 字符型
signed char 有符号型字符(有正负号,字符也能正负?啥意义?先不说好吧) unsigned char 无符号型字符1.2 整型
short (int) int long (int) long long (int) 而这四个中又都能分别加上signed 和unsigned 对于整型的有无正负还是比较好理解的 即数字的正负嘛,signed型既可以表示0和正数,还能表示负数 unsigned型只能表示0和正数 既然signed类型功能更全,那为什么还需要unsigned? 因为在同等配置下(比如都是int),unsigned型所能存储的最大数字就是signed的两倍,因为signed型的一部分空间就留给负数了(你不会觉得只要赋的值没有负数就能让原来放负数的地方放正数吧?没那么好哈)1.3 浮点型
什么是浮点型? 因为小数点是可以“浮动的”,所以小数也叫浮点数, float 单精度浮点型 double (float) 双精度浮点型 long double (float) 精度更多的浮点型 long double 的长度>=double 哈 说实话现在还不太会用这个浮点型变量,搞不清这个小数点后几位的问题。emmm,暂时先认识吧,我去搜了一下,好像区别还蛮大的我还看不懂。 附上链接: 单精度(float)和双精度(double)的区别_浮点型 双精度型数据有什么区别-CSDN博客1.4 布尔类型
C语言中有一类值,只有真和假两种情况,在布尔类型之前, 0表示假,非0表示真 布尔类型是一种专门用来表示真假的一种数据类型,在使用的时候要包含它的专属头文件, #include<stdbool.h> 它只能赋两种值,true/false 现在新的编译器不支持_Bool的方式了,改用bool了,很人性哈。 看示例 会用了哈 我嘞个骚刚,搞错了,我试了一下这种情况的话,不管是true还是false都能正常打印,问题出在哪里?出在没有加上判断条件! 要加上if(a)才行 被自己逗笑了哈哈 现在才是真的会用了哈2. 数据类型的长度
每⼀种数据类型都有自己的长度,使用不同的数据类型,能够创建出⻓度不同的变量,变量长度的不 同,存储的数据范围就有所差异。 存储空间2.1 sizeof 操作符
是一个关键字,也是一个操作符,是专门用来计算类型长度的,单位是字节 但是,因为sizeof的返回值有多种可能性,在打印的时候会造成混乱,所以专门为了它而创建了一个数据类型:size_t类型,(很容易知道就是无符号整数类型,上面图片说了的嘛)专门用%zd来打印。(%d是用来打印int的,所以就是有符号整数)明白了吧。 这个size_t类型和int啊,char啊是并列关系的。 size_t类型就用%zd来打印,更人性化了哈,不然你让我一个一个区分是%u还是%lu还是%llu的话,我会选择“请你的早餐吃颗子弹”。 我去,我在看第二遍的时候才意识到,原来“大”类型相同,“小”类型不同,也要用不同的占位符啊,我原本还以为 unsigned long和unsigned loonglong能用同一个占位符嘞,我靠,原来占位符这么讲究 之前用int a;然后无脑使用%d来作占位符,根本就没考虑过为什么,以为%d好像是官方认证一样,啥时候都能用, 来试试看sizeof的作用 这里可能会有疑问,long int=int的长度,其实,C语言只规定: long int >=int,所以这里的=也不能算出错了好吧,如果要消除这种不确定性,一定要8个bit位,就选long long int。 如果是表达式的时候,括号就可以省略 size of 后面的表达式不会真实运算,根据表达式的类型来得出 怎么理解? 尤其是第四个和第五个的区别 要注意哈,上面说的在计算表达式的时候可以省略掉括号,是语法层面的可以,也就是说不会报错,但是省略掉之后运算逻辑会变化,也就是说分成两个部分了, printf打印的值是大圆形的值,但是大圆形里面的值是小圆形的值加上100,明白? 所以括号到底省不省略,看具体的计算要求。 通过第四个例子也能看出来,表达式是不会真的参与计算的,sizeof只管它括号里面的是什么类型,因为a是整型,100也是,所以算出来的就是整型对应的4。 再看一个关于截断的问题 这里为了方便观看我把两个类型的宽度弄得不一样,其实应该是一样的。 短的是short,长的是int,把长的塞给短的,多出去的那一部分因为装不进去就直接被舍弃了,好理解吧,所以最后计算的就是short的长度,反之,也好理解。 但是这个第三个,跨类型的问题,我暂时还不理解哈,应该是还没学到那么深。2.2 数据类型的取值范围
在 limits.h 文件中看整型类型的取值范围 在 float.h 文件中看浮点型类型的取值范围 虽说现在看上去好i象很不好懂,但别急,慢慢来好吧。 未来的我一定不差,因为现在的我相信我不会差3. signed 和 unsigned
前面其实已经介绍了,这里就只补充一下缩写的问题。 C 语⾔使⽤ signed 和 unsigned 关键字修饰 字符型和整型。3.1 对于 int 类型
默认是带有正负号的,也就是说 int 等同于 signed int 如果要表示无正负号的,需要自己加上unsigned3.2 对于 char 类型
C 语⾔规定 char 类型默认是否带有正负号,由当前系统决定。(看你使用的是什么编译器) 也就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是 unsigned char, 你想具体表示有无符号,需要自己加上signed 或 unsigned 。4. 变量
了解清楚了类型,我们使⽤类型做什么呢?类型是⽤来创建变量的。 什么是变量呢?C语⾔中把经常变化的值称为变量,不变的值称为常量。 如: int a; char b; 在创建变量的时候给变量赋一个值,就叫变量的初始化。 如: int a=1000; 变量分为两种:4.1 全局变量
就是最大的那个括号的外面定义的变量。 全局变量不仅可以在开启的这个项目里面适用(这个源文件中),还可以在其他的源文件中使用, 不过要加上申明外部符号这一个语句。4.2 局部变量
在括号里面定义的变量,使用范围也仅限于这个大括号里面,(也能用于这个大括号里面的小括号,懂?有点老虎不在家,猴子当大王的感觉) 全局变量和局部变量的存储位置不同 ⼀般在学习C/C++语⾔的时候,我们会关注 内存中的三个区域:栈区、堆区、静态区。 存储位置就是这样的, 局部变量是放在内存的栈区 全局变量是放在内存的静态区 堆区是⽤来动态内存管理的 后面会再详细解释。