C 语言基本数据类型简介
1. 概述
C 语言包含的数据类型如下图所示:
C 语言中的基本数据类型有整形字符型浮点型: 单精度型双精度型; 枚举类型数组等
1 整形
整形分为整形常量和整形变量, 常量就是我们平时所看到的准确的数字, 例如: 120333 等等, 变量则按我的理解是我像内存去申请一个存储空间, 告诉内存空间我申请了这个地方用来存放一个整形的数据, 但是什么时候放并没有直接确定一般占 4 个字节(32 位), 最高位代表符号, 0 表示正数, 1 表示负数, 取值范围是 - 2147483648~2147483647, 在内存中的存储顺序是地位在前高位在后, 例如 0x12345678 在内存中的存储如下
定义: 用 int 关键字, 举例如下:
在 C 语言中基本的整形变量标识符是 int, 在 32 位机器中一个 int 型数据使用 32 位也就是 4 个字节进行存储
小编推荐一个学 C 语言 / C++ 的学习裙 二六三, 六八八, 二七六 , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
2 字符型
字符型在其本质上就是整形, 我们在 C 语言中使用 char 表示一个字符型, 他占用一个字符的存储空间, 字符型在存储时其内部存储的依旧是二进制数据, 当我们读出时将会得到一个整形数据, 而我们输出时会得到一个字符是因为我们人为的定义了一个对照表, 这个表规定字符 a 的数值就是 97, 所以当我们遇到 97 时我们有两种读出方式, 第一种以整数形式读出就是 97, 另一种就是以字符型读出, 使用 %c 指定读出形式, 则对照表则为 a
3 浮点型
除了整形还有另一类很重要的基本数据类型, 那就是实型我们在学习数学时不仅使用整数, 更多的时候则是使用小数, 那么浮点数在内存中饭的存储与整数在内存中的存储有什么不一样的地方吗? 其实, 单从数据存储上看, 都是 2 进制并没有任何不同, 但不同的是我们加在其上的表示规则与读取规则无论单精度还是双精度的浮点数在内存中我们对于一个浮点数都分为三个部分:
1 符号位: 0 代表正 1 代表负;
2 指数位: 用于存储科学技术法中的指数;
3 尾数位: 存储尾数部分
3.1 单精度
float: 系统的基本浮点类型至少能精确表示 6 位有效数字
我们在 C 语言中使用一个 float 类型表示一个单精度的浮点类型, 一个 float 类型占用 4 个字节的存储位, 其中最高位为符号位, 紧接着 8 位为指数位, 剩下的 23 位为尾数位, 我们使用 %f 作为其格式说明符, 而且 float 一般精确到小数位后 6 位, 即保证 6 位有效
3.2 双精度
double: 范围 (可能) 更大的浮点类型能表示比 float 类型更多的有效数字以及更大的指数
long double: 范围 (可能) 更大的浮点类型能表示比 double 类型更多的有效数字以及更大的指数
我们在 C 语言中使用一个 double 类型表示一个双精度的浮点类型, 一个 double 类型占用 8 个字节的存储位, 最高位为符号位, 紧接着 8 位为指数位, 剩下的 52 位为尾数位, 我们使用 %lf 作为其格式说明符, 而且 double 类型一般精确到小数位后 12 位, 即保证 12 位有效
4 指针
指针? 什么是指针? 从根本上看, 指针是一个值为内存地址的变量 (或数据对象) 正如 char 类型变量的值是字符, int 类型的变量的值是整数, 指针变量的值地址在 C 语言中, 指针有许多用法
假设一个指针变量名是 ptr, 可以编写如下语句:
小编推荐一个学 C 语言 / C++ 的学习裙 二六三, 六八八, 二七六 , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
对于这条语句, 我们就可以说 ptr 指向 poohptr 和 & pooh 的区别是 ptr 是变量, 而 & pooh 是常量或者, ptr 是可修改的左值, 而 & pooh 是右值还可以把 ptr 指向别处:
ptr = &bah; // 把 ptr 指向 bah, 而不是 pooh
现在 ptr 的值是 bah 的地址
要创建指针变量, 先要声明指针变量的类型
5 数组
数组是按照顺序存储的一系列类型相同的值, 如 10 个 char 类型的字符或 15 个 int 类型的值整个数组有一个数组名, 通过整数下标访问数组中单独的项或元素例如: 以下声明:
float debts[20];
声明 debts 是一个内容 20 个元素的数组, 每个元素都可以存储 float 类型的值数组的第一个元素是 debts[0], 第 2 个元素是 debts[1], 以此类推, 直到 debts[19]注意, 数组元素的编号从 0 开始, 不是从 1 开始可以给每个元素赋 float 类型的值例如, 可以这样写:
- debts[5] = 32.54;
- debts[6] = 1.2e + 21;
实际上, 使用数组元素和使用同类型的变量一样例如, 可以这样把值读入指定的元素中:
scanf("%f",&debts[4]);// 把一个值读入数组的第 5 个元素
这里要注意一个潜在的陷阱: 考虑到影响执行的速度, C 编译器不会检查数组的下标是否正确下面的代码, 其实都不正确:
- debts[20] = 88.32;// 该数组元素不存在!
- debts[33] = 828.12;// 该数组元素不存在!
编译器不会查找这样的错误当运行程序时, 这会导致数据被放置在已被其他数据占用的地方, 可能会破坏程序的结果甚至导致程序异常中断
6 复数和虚数类型(因为用的不多, 所以这里几乎省略)
注意:
char 类型肯定是 1 字节, 因为 C 把 char 类型的长度定义为 1 个字节所以在 char 类型长为 16 位, double 类型长为 64 位的系统中, sizeof 将报告 double 类型有 4 字节长
好了, 简单的数据类型介绍我们就到这里了, 希望能帮助大家理解入门 笔记只是辅助, 更多的还是需要大家跟着老湿一起学习, 互动交流最后预祝小伙伴们学业有成!
来源: http://www.jianshu.com/p/f87c5ac69a7f