# C 数据类型
在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
C 中的类型可分为以下几种:
| 类型 | 描述 |
| --- | --- |
| **基本类型:** | 它们是算术类型,包括两种类型:整数类型和浮点类型。 |
| **枚举类型:** | 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。 |
| **void 类型:** | 类型说明符 _void_ 表明没有可用的值。 |
| **派生类型:** | 它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。 |
数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。在本章节接下来的部分我们将介绍基本类型,其他几种类型会在后边几个章节中进行讲解。
## 整数类型
下表列出了关于标准整数类型的存储大小和值范围的细节:
| 类型 | 存储大小 | 值范围 |
| --- | --- | --- |
| char | 1 byte | -128 到 127 或 0 到 255 |
| unsigned char | 1 byte | 0 到 255 |
| signed char | 1 byte | -128 到 127 |
| int | 2 或 4 bytes | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
| unsigned int | 2 或 4 bytes | 0 到 65,535 或 0 到 4,294,967,295 |
| short | 2 bytes | -32,768 到 32,767 |
| unsigned short | 2 bytes | 0 到 65,535 |
| long | 4 bytes | -2,147,483,648 到 2,147,483,647 |
| unsigned long | 4 bytes | 0 到 4,294,967,295 |
为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 **sizeof** 运算符。表达式 _sizeof(type)_ 得到对象或类型的存储字节大小。下面的实例演示了获取 int 类型的大小:
```
#include <stdio.h>
#include <limits.h>
int main()
{
printf("Storage size for int : %d \n", sizeof(int));
return 0;
}
```
当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:
```
Storage size for int : 4
```
## 浮点类型
下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:
| 类型 | 存储大小 | 值范围 | 精度 |
| --- | --- | --- | --- |
| float | 4 byte | 1.2E-38 到 3.4E+38 | 6 位小数 |
| double | 8 byte | 2.3E-308 到 1.7E+308 | 15 位小数 |
| long double | 10 byte | 3.4E-4932 到 1.1E+4932 | 19 位小数 |
头文件 float.h 定义了宏,在程序中可以使用这些值和其他有关实数二进制表示的细节。下面的实例将输出浮点类型占用的存储空间以及它的范围值:
```
#include <stdio.h>
#include <float.h>
int main()
{
printf("Storage size for float : %d \n", sizeof(float));
printf("Minimum float positive value: %E\n", FLT_MIN );
printf("Maximum float positive value: %E\n", FLT_MAX );
printf("Precision value: %d\n", FLT_DIG );
return 0;
}
```
当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:
```
Storage size for float : 4
Minimum float positive value: 1.175494E-38
Maximum float positive value: 3.402823E+38
Precision value: 6
```
## void 类型
void 类型指定没有可用的值。它通常用于以下三种情况下:
| 类型 | 描述 |
| --- | --- |
| **函数返回为空** | C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 **void exit (int status);** |
| **函数参数为空** | C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 **int rand(void);** |
| **指针指向 void** | 类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 **void *malloc( size_t size );** 返回指向 void 的指针,可以转换为任何数据类型。 |
如果现在您还是无法完全理解 void 类型,不用太担心,在后续的章节中我们将会详细讲解这些概念。
- C语言教程
- C 简介
- C 环境设置
- C 程序结构
- C 基本语法
- C 数据类型
- C 变量
- C 常量
- C 存储类
- C 运算符
- C 判断
- C 循环
- C 函数
- C 作用域规则
- C 数组
- C 指针
- C 字符串
- C 结构体
- C 共用体
- C 位域
- C typedef
- C 输入 & 输出
- C 文件读写
- C 预处理器
- C 头文件
- C 强制类型转换
- C 错误处理
- C 递归
- C 可变参数
- C 内存管理
- C 命令行参数
- C语言参考
- C 标准库 - <assert.h>
- C 库宏 - assert()
- C 标准库 - <ctype.h>
- C 库函数 - isalnum()
- C 库函数 - isalpha()
- C 库函数 - iscntrl()
- C 库函数 - isdigit()
- C 库函数 - isgraph()
- C 库函数 - islower()
- C 库函数 - isprint()
- C 库函数 - ispunct()
- C 库函数 - isspace()
- C 库函数 - isupper()
- C 库函数 - isxdigit()
- C 标准库 - <errno.h>
- C 库宏 - errno
- C 库宏 - EDOM
- C 库宏 - ERANGE
- C 标准库 - <float.h>
- C 标准库 - <limits.h>
- C 标准库 - <locale.h>
- C 库函数 - setlocale()
- C 库函数 - localeconv()
- C 标准库 - <math.h>
- C 库函数 - acos()
- C 库函数 - asin()
- C 库函数 - atan()
- C 库函数 - atan2()
- C 库函数 - cos()
- C 库函数 - cosh()
- C 库函数 - sin()
- C 库函数 - sinh()
- C 库函数 - tanh()
- C 库函数 - exp()
- C 库函数 - frexp()
- C 库函数 - ldexp()
- C 库函数 - log()
- C 库函数 - log10()
- C 库函数 - modf()
- C 库函数 - pow()
- C 库函数 - sqrt()
- C 库函数 - ceil()
- C 库函数 - fabs()
- C 库函数 - floor()
- C 库函数 - fmod()
- C 标准库 - <setjmp.h>
- C 库宏 - setjmp()
- C 库函数 - longjmp()
- C 标准库 - <signal.h>
- C 库函数 - signal()
- C 库函数 - raise()
- C 标准库 - <stdarg.h>
- C 库宏 - va_start()
- C 库宏 - va_arg()
- C 库宏 - va_end()
- C 标准库 - <stddef.h>
- C 库宏 - NULL
- C 库宏 - offsetof()
- C 标准库 - <stdio.h>
- C 库函数 - fclose()
- C 库函数 - clearerr()
- C 库函数 - feof()
- C 库函数 - ferror()
- C 库函数 - fflush()
- C 库函数 - fgetpos()
- C 库函数 - fopen()
- C 库函数 - fread()
- C 库函数 - freopen()
- C 库函数 - fseek()
- C 库函数 - fsetpos()
- C 库函数 - ftell()
- C 库函数 - fwrite()
- C 库函数 - remove()
- C 库函数 - rename()
- C 库函数 - rewind()
- C 库函数 - setbuf()
- C 库函数 - tmpfile()
- C 库函数 - tmpnam()
- C 库函数 - fprintf()
- C 库函数 - printf()
- C 库函数 - sprintf()
- C 库函数 - vfprintf()
- C 库函数 - vprintf()
- C 库函数 - vsprintf()
- C 库函数 - fscanf()
- C 库函数 - scanf()
- C 库函数 - sscanf()
- C 库函数 - fgetc()
- C 库函数 - fgets()
- C 库函数 - fputc()
- C 库函数 - fputs()
- C 库函数 - getc()
- C 库函数 - getchar()
- C 库函数 - gets()
- C 库函数 - putc()
- C 库函数 - putchar()
- C 库函数 - puts()
- C 库函数 - ungetc()
- C 库函数 - perror()
- C 标准库 - <stdlib.h>
- C 库函数 - atof()
- C 库函数 - atoi()
- C 库函数 - atol()
- C 库函数 - strtod()
- C 库函数 - strtol()
- C 库函数 - strtoul()
- C 库函数 - calloc()
- C 库函数 - free()
- C 库函数 - malloc()
- C 库函数 - realloc()
- C 库函数 - abort()
- C 库函数 - atexit()
- C 库函数 - exit()
- C 库函数 - getenv()
- C 库函数 - system()
- C 库函数 - bsearch()
- C 库函数 - qsort()
- C 库函数 - abs()
- C 库函数 - div()
- C 库函数 - labs()
- C 库函数 - ldiv()
- C 库函数 - rand()
- C 库函数 - srand()
- C 库函数 - mblen()
- C 库函数 - mbstowcs()
- C 库函数 - mbtowc()
- C 库函数 - wcstombs()
- C 库函数 - wctomb()
- C 标准库 - <string.h>
- C 库函数 - memchr()
- C 库函数 - memcmp()
- C 库函数 - memcpy()
- C 库函数 - memmove()
- C 库函数 - memset()
- C 库函数 - strcat()
- C 库函数 - strncat()
- C 库函数 - strchr()
- C 库函数 - strcmp()
- C 库函数 - strncmp()
- C 库函数 - strcoll()
- C 库函数 - strcpy()
- C 库函数 - strncpy()
- C 库函数 - strcspn()
- C 库函数 - strerror()
- C 库函数 - strlen()
- C 库函数 - strpbrk()
- C 库函数 - strrchr()
- C 库函数 - strspn()
- C 库函数 - strstr()
- C 库函数 - strtok()
- C 库函数 - strxfrm()
- C 标准库 - <time.h>
- C 库函数 - asctime()
- C 库函数 - clock()
- C 库函数 - ctime()
- C 库函数 - difftime()
- C 库函数 - gmtime()
- C 库函数 - localtime()
- C 库函数 - mktime()
- C 库函数 - strftime()
- C 库函数 - time()
- 免责声明