数据类型
基本数据类型(不能再分)
整数
整型 -- int -- 4字节(一个字节占8位)
短整型 -- short int -- 2字节
长整型 -- long int -- 8字节
short num01 = 3;
long num02 = 4;
long long num03 = 5; //int关键字可以省略
实际上等价于以下代码:
short int num01 = 3;
long int num02 = 4;
long long int num03 = 5;
浮点数
单精度浮点数 -- float -- 4字节
双精度浮点数 -- double -- 8字节
#include <stdio.h>
int main(void){
float c = 3.14;
float a, b;
scanf("%f , %f", &a, &b); // scanf 函数使用了格式字符串 "%f , %f" 并期望输入的两个浮点数之间有一个逗号
// 在获取输入后再计算d的值
float d = (a + b) * c;
printf("a = %f, b = %f, d = %.2f", a, b, d); // 对d的结果也应用%f格式符,这里限制了小数点后两位精度
return 0;
}
#include <stdio.h>
int main(void){
double c = 3.14; // 变量c仍为double,保持不变
double a, b; // 现在a和b都是double类型
scanf("%lf %lf", &a, &b); // 对于double类型的输入,scanf需要使用"%lf"而非"%f"
double d = (a + b) * c; // 计算结果d现在也是double类型
printf("a = %.6lf, b = %.6lf, d = %.6lf", a, b, d); // 对于double类型的输出,推荐使用%.6lf以提供更高的精度
return 0;
}
字符
char -- 1字节
复合数据类型
结构体
枚举
共用体(被淘汰了)
需要注意的是,数据类型的大小,取值范围和有效数字位数可能会因编译器和平台的不同而有所变化。
变量
变量代表一个有名字的、具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。
变量必须先定义,后使用。在定义时指定该变量的名字和类型。一个变量应该有一个名字,以便被引用。请注意区分变量名和变量值这两个不同的概念, 图3.3中 a 是变量名,3 是变量 a 的值,即存放在变量 a 的内存单元中的数据。变量名实际上是以一个名字代表的一个存储地址。在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。
当执行 int a= 3;这段C语言代码时,计算机操作系统与硬件协同完成了以下步骤:
1、变量声明: 编译器在编译阶段遇到这条语句,会识别出这是一个整型变量(int)的声明,需要在内存中分配存储空间来存放该类型的数据。
2、内存分配: 在程序运行时,操作系统负责管理内存。当程序开始执行并初始化变量i时,首先会在栈(对于局部变量而言)上为变量i分配内存空间,具体大小取决于编译器对整型数据类型的定义(通常在32位系统中是4字节,在64位系统中也是4或8字节)。
3、内存赋值: 初始化 a = 3 意味着将分配到的内存区域填充为整数值 3 。CPU根据指令从内存或寄存器中读取 3 这个值,并将其写入到刚刚分配给变量 a 的内存地址中。
总结来说,这段代码执行过程中,操作系统主要参与了内存分配的工作,而具体的内存赋值操作则由CPU完成。通过这样的过程,变量i就在内存中得到了一块存储空间并被赋予了初始值3。
常量
在程序运行的过程中,其值不能被改变的量称为常量
整型常量
eg : 1000、0、123.25、-652..
实型常量
十进制小数形式。有数字和小数组成。eg : 12.5. 指数形式。
字符常量
符号常量
用 #define 指令,指定用一个符号名称代表一个常量。
#define PI 3.1415 //末尾没有分号,程序用到PI就代表是3.1415
字符串常量
双引号括起来的若干个字符。eg:"hello"、"123" 。
普通字符
用单引号括起来的单个字符。 eg : '5'、'e’、'?"
在C语言中,普通字符(char)在计算机中的存储通常使用ASCII编码。ASCI编码使用一个字节(8位)来表示一个字符,范围从0到127。其中,0到31是控制字符,32到126是可打印字符,而127是删除字符。
例如,字符'A'的ASCII码是65,以二进制表示为01000001。在计算机中,该字符会被存储为一个字节,即8位,从高位到低位依次为01000001。
关于高低位请参考计算机组成原理部分知识:
转义字符(以\开头的字符)
C语言中使用字符串时,有时候需要插入一些特殊字符或者控制字符,这时就可以使用转义字符来实现。转义字符以反斜杠(\)开头,后面跟着一个或多个字符,用来表示特定的含义。例如,\n代表换行符,当我们在字符串中插入\n时,编译器会将其解释为换行符,输出时会在该位置换行。同样地,\t代表制表符,\r代表回车符,\b代表退格符,\f代表换页符等等。