数据类型
1数据类型概要
整形类型描述整数,字符类型描述字符,浮点型类型描述小数。
特殊说明:布尔类型
需要拥有的头文件(<stdbool.h)
布尔类型的变量的取值是:true/false
#define bool _Bool
#define false 0
#define true 1
实例
_Bool flag = true;
if (flag)
printf("i like C\n");
2数据类型长度
Ⅰsizeof操作符
sizeof是 关键字 ,也是 操作符 。专门用来计算sizeof的操作符数的类型长度,单位是字节。
sizeof操作符的操作数可以是 类型 ,也可以是 变量或表达式。
sizeof (类型)
sizeof 表达式
※表达式可省略括号
※表达式并不参与真实运算
※只根据表达式的类型来得出大小
sizeof运算符的返回值:C语⾔只规定是⽆符号整数,并没有规定具体的类型,⽽是留给系统⾃⼰去决定,sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是unsigned int ,也有可能是对应的printf() 占位符分别unsigned long ,甚⾄是%u 、%lu和unsigned long long ,%llu 。这样不利于程序的可移植性。C语⾔提供了⼀个解决⽅法,创造了⼀个类型别名回值类型。对应当前系统的 size_t ,⽤来统⼀表⽰sizeof 的返回值类型。对应当前系统的sizeof的返回值类型,可能是unsigned int ,也可能是unsigned long long 。
Ⅱ数据类型长度
#include <stdio.h>
int main()
{
printf("%zd\n", sizeof(char));
printf("%zd\n", sizeof(_Bool));
printf("%zd\n", sizeof(short));
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(long));
printf("%zd\n", sizeof(long long));
printf("%zd\n", sizeof(float));
printf("%zd\n", sizeof(double));
printf("%zd\n", sizeof(long double));
return 0;
}
vs2022 X64配置下的输出
1 1
2 1
3 2
4 4
5 4
6 8
7 4
8 8
9 8
注意:sizeof的返回值,用 %zd 来打印。
Ⅲsizeof中表达式不计算
sizeof在代码进行编译的时候,就根据表达式的类型确定了。表达式在程序运行时才执行,可是在编译期间sizeof已经被处理掉了,所以程序运行期间表达式不再执行。
3signed与unsigned
C语言中使用signed与unsigned修饰字符型和整形类型。
signed关键字:表示一个类型有正负号,包含负值。
unsigned关键字:…只能表示0/正整数。
对于int类型,默认带有正负号,省略不写(写了也对)
int类型也可以不带有正负号,只表示非负整数,需要用到关键字unsigned来声明变量。
整数变量声明为unsigned的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了一倍。⽐如,16位的signed short int 的取值范围是:-32768~32767,最⼤是32767;⽽unsigned short int
的取值范围是:0~65535,最⼤值增⼤到了65,535。32位的
int 的取值范围可以参看limits.h 中给出的定义(下图)。
#define SHRT_MIN (-32768)//有符号16位整型的最⼩值
#define SHRT_MAX 32767//有符号16位整型的最⼤值
#define USHRT_MAX 0xffff//⽆符号16位整型的最⼤值
#define INT_MIN (-2147473647-1)//有符号整型的最⼩值
#define INT_MAX (214747367)//有符号整型的最⼤值
变量
全局变量:在⼤括号外部定义的变量就是全局变量
全局变量的使⽤范围更⼴ ,整个⼯程中想使⽤ ,都是有办法使⽤的。
局部变量:在⼤括号内部定义的变量就是局部变量
局部变量的使⽤范围是⽐较局限 ,只能在⾃⼰所在的局部范围内使⽤的。
#include <stdio.h> 2
int global = 2023;//全局变量
int main()
{
int local = 2018;//局部变量
printf("%d\n", local);
printf("%d\n", global);
return = 0;
}
注意:其实当局部变量和全局变量同名的时候 ,局部变量优先使⽤ 。
局变量和局部变量在内存中存储在哪⾥呢?
⼀般我们在学习C/C++语⾔的时候 ,我们会关注 内存中的三个区域:栈区、堆区、静态区。
- 局部变量是放在内存的栈区
- 全局变量是放在内存的静态区
- 堆区是⽤来动态内存管理的