1、数据类型
- C语言中的类型可分为以下几种
- 基本类型:它们是算术类型,包括两种类型:整数类型和浮点类型
- 枚举类型:它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量
- void 类型:类型说明符 void 表明没有可用的值
- 派生类型:它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型
- 基本类型:它们是算术类型,包括两种类型:整数类型和浮点类型
- C语言把任何非零和非空的值假定为 true,把零或 null 假定为 false ,C语言没有布尔类型
2、数值类型
- 各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主
int、short int、long int是根据编译环境的不同,所取范围不同
整型
char:1 字节,-128 到 127 或 0 到 255
- unsigned char:1 字节,0 到 255
- 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 int:2 字节,-32,768 到 32,767
- long int:8 字节
- 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
#include <stdio.h>int main(int argc, const char * argv[]) {// insert code here...printf("char 存储大小 : %lu \n", sizeof(char)); // 1printf("unsigned char 存储大小 : %lu \n", sizeof(unsigned char)); // 1printf("short 存储大小 : %lu \n", sizeof(short));// 2printf("unsigned short 存储大小 : %lu \n", sizeof(unsigned short));// 2printf("int 存储大小 : %lu \n", sizeof(int));// 4printf("unsigned int 存储大小 : %lu \n", sizeof(unsigned int));// 4printf("long 存储大小 : %lu \n", sizeof(long));// 8printf("unsigned long 存储大小 : %lu \n", sizeof(unsigned long));// 8return 0;}
进制
进制
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 位小数

#include <stdio.h>#include <float.h>int main(int argc, const char * argv[]) {printf("float 存储最大字节数 : %d \n", sizeof(float));// 4printf("double 存储最大字节数 : %d \n", sizeof(double));// 8printf("long double 存储最大字节数 : %d \n", sizeof(long double));// 16printf("float 最小值: %E\n", FLT_MIN );// 1.175494E-38printf("float 最大值: %E\n", FLT_MAX );// 3.402823E+38printf("精度值: %d\n", FLT_DIG );// 6return 0;}
类型转换
自动/强制类型转换
int main(int argc, const char * argv[]) {// 浮点数赋给整型,该浮点数小数被舍去int a;float x=3.6,y=5.2;a = x+y;printf("a=%d\n",a);//8// 整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中float f = 10/4; // 10/4等于整数2printf("f=%f\n",f);//2.000000printf("f=%f\n",(float)4);//4.000000printf("f=%d\n",(int)4.00000);//4return 0;}
数值溢出
int main(){float a,b;// float长度不够储存该数值a = 123456.789e5;b = a + 20;printf("%f\n",a);// 12345678848.000000printf("%f\n",b);// 12345678848.000000return 0;}
int_t
int_t为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型
因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。
int8_t : typedef signed char;uint8_t : typedef unsigned char;int16_t : typedef signed short ;uint16_t : typedef unsigned short ;int32_t : typedef signed int;uint32_t : typedef unsigned int;int64_t : typedef signed long long;uint64_t : typedef unsigned long long;
3、void类型
void 类型指定没有可用的值。它通常用于以下三种情况下:
字符串:会在尾部添加一个“\0”作为字符串结束的标志
C语言中不存在字符串变量,字符串只能存在字符数组中,这个后面会讲
char a = 'a';char b[] = "a";printf("%d\n",sizeof(a));// 1printf("%d\n",sizeof(b));// 2
