一、数据类型的作用
用于声明不同类型的变量或函数,变量的类型决定了变量存储占用的空间
二、数据类型的分类
序号 | 类型与描述 |
1 | 基本数据类型 |
2 | 枚举类型 算数类型:定义在程序中只能赋予其一定的离散整数值的变量 |
3 | void 类型 没有值的数据类型,通常用于函数返回值 |
4 | 派生类型 数组类型([ ])、指针类型(*)、结构体类型(struct) |
数组类型和结构体类型统称为聚合类型。函数的类型指的是函数返回值的类型。
三、整数类型
类型 | 存储大小 | 取值范围 |
char | 1 字节 | -128 到 127 或 0 到 255 |
unsigned char | 1 字节 | 0 到 255 |
signed char | 1 字节 | -128 到 127 |
int | 2 或 4 字节 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2 或 4 字节 | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2 字节 | -32,768 到 32,767 |
unsigned short | 2 字节 | 0 到 65,535 |
long | 4 字节 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4 字节 | 0 到 4,294,967,295 |
3.1 浅谈unsigned和signed
作用 | 8位的char取值范围 | 32位的int取值范围 | 意义 | 打印方式 | |
unsigned | 用来声明无符号的整形变量 | 0~2^8-1 (取值范围是0~2^n-1) | 0~2^32 | 将变量能够表示的正整数范围扩大1倍,无法表示负整数 | %u(无符号的10进制正数) |
signed | 用来声明有符号的整形变量 | -2^7~2^7-1 | -2^31~2^31-1 | %d(有符号的10进制整数) |
3.2 格式化字符的含义
格式字符 | 意义 |
%d | 以十进制形式输出带符号整数(正数不输出符号) |
%a, %A | 以十六进制形式输出浮点数(C99 新增)。 实例 printf("pi=%a\n", 3.14); 输出 pi=0x1.91eb86p+1。 |
%f | 以小数形式输出单、双精度实数 |
%o | 以八进制形式输出无符号整数(不输出前缀0) |
%x, %X | 以十六进制形式输出无符号整数(不输出前缀Ox) |
%u | 以十进制形式输出无符号整数 |
%x | 以十六进制形式输出无符号整数(不输出前缀Ox) |
%c | 输出单个字符 |
%s | 输出字符串 |
%p | 输出指针地址 |
四、浮点类型
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位有效位 |
double | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位有效位 |
long double | 16 字节 | 3.4E-4932 到 1.1E+4932 | 19 位有效位 |
五、void 类型
void 通常用于以下三种情况:
序号 | 类型与描述 |
---|---|
1 | 函数返回为空 C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status); |
2 | 函数参数为空 C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void); |
3 | 指针指向 void 类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。 |
六、sizeof 操作符
作用:获取某个数据类型的长度
#include<stdio.h>
int main(){
short a = 10;
int b = 100;
int short_length = sizeof a;
int int_length = sizeof(b);
int long_length = sizeof(long);
int char_length = sizeof(char);
printf("short_length:%d\n",short_length); /* short_length:2 */
printf("int_length:%d\n",int_length); /* int_length:4 */
printf("long_length:%d\n",long_length); /* long_length:4 */
printf("char_length:%d",char_length); /* char_length:1 */
return 0;
}