C语言中数据类型用于申明变量或函数。类型是对数据分配存储单元的安排,包括存储单元的长度(占有字节)以及数据的存储形式。
C语言中数据类型分为以下几种:
类型 | 描述 |
基本类型 | 属于算术类型,包括整数类型和浮点类型 |
枚举类型(enum) | 属于算术类型,程序中用户定义的整数类型 |
空类型(void) | 表示没有值可用 |
派生类型 | 包括:指针类型、数组类型、结构体类型、共用体类型、函数类型 |
1.整数类型
以下是在64位系统下整数类型的详情:
类型 | 存储大小 | 值范围 | 描述 |
(signed) char(有符号字符型) | 1byte | -128~127 | 有符号8位整数 |
unsigned char (无符号字符型) | 1byte | 0~255 | 无符号8位整数 |
(signed)short(有符号短整型) | 2byte | -32768~32767 | 有符号16位整数 |
unsigned short(无符号短整型) | 2byte | 0~65535 | 无符号16位整数 |
(signed)int(有符号基本整形) | 4byte | -2147483648~2147483647 | 有符号32位整数 |
unsigned int(无符号基本整型) | 4byte | 0~4294967295 | 无符号32位整数 |
(signed)long long int(有符号双长整型) | 8byte | -9223372036854775808~9223372036854775807 | 有符号64位整数 |
unsigned long long int (无符号双长整型) | 8byte | 0~18446744073709551615 | 无符号64位整数 |
_Bool(布尔型) | 1byte | 1(true),0(false) | 8位整数 |
在stdint.h和stdbool.h中对精确宽度整数类型及其大小限制有下列定义:
typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef short int16_t;
typedef unsigned short uint16_t;
typedef int int32_t;
typedef unsigned uint32_t;
typedef long long int64_t;
typedef unsigned long long uint64_t;
typedef bool _Bool
typedef true 1
typedef false 0
#define INT8_MIN (-128)
#define INT16_MIN (-32768)
#define INT32_MIN (-3247483647 - 1)
#define INT64_MIN (-9223372036854775807LL - 1)
#define INT8_MAX 127
#define INT16_MAX 32767
#define INT32_MAX 2147483647
#define INT64_MAX 9223372036854775807LL
#define UINT8_MAX 0xff /*255U*/
#define UINT16_MAX 0xffff /*65535*/
#define UINT32_MAX 0xffffffff /*4294967295U*/
#define UINT64_MAX 0xffffffffffffffff /*18446744073709551615ULL*/
2.浮点类型
浮点类型详情:
类型 | 字节数 | 取值范围(绝对值) | 有效位数 |
float | 4 | 1.175494e-38~3.402823e+38 | 6 |
double | 8 | 2.225074e-308~1.797693e+308 | 15 |
long double | 16 | 3.362103e-4932~1.189731e+4932 | 18 |
int main(int arg,char* argv[]){
printf("单精度浮点型存储字节大小:%lu\n",sizeof(float));
printf("单精度浮点型取值范围(绝对值):%e~%e\n",FLT_MIN,FLT_MAX);
printf("单精度浮点型有效位数:%d\n",FLT_DIG);
printf("双精度浮点型存储字节大小:%lu\n",sizeof(double));
printf("双精度浮点型取值范围(绝对值):%e~%e\n",DBL_MIN,DBL_MAX);
printf("双精度浮点型有效位数:%d\n",DBL_DIG);
printf("长双精度型存储字节大小:%lu\n",sizeof(long double));
printf("长双精度型取值范围(绝对值):%Le~%Le\n",LDBL_MIN,LDBL_MAX);
printf("长双精度型有效位数:%d\n",LDBL_DIG);
return 0;
}
运行结果:
单精度浮点型存储字节大小:4
单精度浮点型取值范围(绝对值):1.175494e-38~3.402823e+38
单精度浮点型有效位数:6
双精度浮点型存储字节大小:8
双精度浮点型取值范围(绝对值):2.225074e-308~1.797693e+308
双精度浮点型有效位数:15
长双精度型存储字节大小:16
长双精度型取值范围(绝对值):3.362103e-4932~1.189731e+4932
长双精度型有效位数:18
C99中提供了复数支持,用两个两同的浮点类型分别表示复数的实部和虚部,例:float _Complex = float +float*i.并可以分别通过creal(float _Complex)和cimag(float _Complex)函数获取该复数的实部和虚部。具体定义于头文件complex.h中。
printf("单精度浮点型复数字节大小:%lu\n",sizeof(float _Complex));
printf("双精度浮点型复数字节大小:%lu\n",sizeof(double _Complex));
printf("长双精度型复数字节大小:%lu\n",sizeof(long double _Complex));
运行结果:
单精度浮点型复数字节大小:8
双精度浮点型复数字节大小:16
长双精度型复数字节大小:32
3.枚举类型
所谓枚举是指将变量的值一一列举出来,变量指限于列举出来的值的范围内取值。
enum Color{
RED,
BLUE,
BLACK = 5,
YELLEW
};
enum Color red = RED;
printf("red = %d\n",red);
enum Color blue = BLUE;
printf("blue = %d\n",blue);
enum Color black = BLACK;
printf("black = %d\n",black);
enum Color yellew = YELLEW;
printf("yellew = %d\n",yellew);
运行结果:
red = 0
blue = 1
black = 5
yellew = 6
4.空类型
void类型指没有可用值,一般出现于下列三种情况:
类型 | |
函数返回为空 | 不返回值的函数的返回类型为空,例如:void exit() |
函数参数为空 | 不带参数的函数,可以接收一个void,例如:int rand(void) |
指针指向为空 | 类型为void的指针代表对象的地址,而非类型。例如:void malloc(size_t size);返回指向void的指针,可以转换为任何数据类型。 |