C语言中,数据类型可分为四种:
- 基本数据类型
- 构造数据类型
- 指针类型
- 空类型四大类
1.基本数据类型
整型
C语言的整数类型中,分为signed和unsigned
signed表示有符号整数,即正数和负数,int a=10,默认会在int前加上signed
unsigned表示这个变量是无符号正数,这个数只能为正数。因此,这个数的值范围大一倍
字符型
浮点型
自动类型转换
不同数据类型运算时,会发生类型自动转换,在编译的时候自动完成
字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换
char类型数据转换为int类型数据遵循ASCII码中的对应值.
char可以转换为int,int可以转换为double,char可以转换为double。但是不可以反向。
强制类型转换
将精度高的类型,强制转换成精度低的类型。在转换的过程中,可能会丢失数值准确度,因为精度小的容纳不了原本那么长的精度,所以会直接截断后面的精度,造成丢失
double a=1.1;
int b= (int) a;
布尔型
C语言中没有具体的布尔类型,通常用整数表示,0表示false,非0表示true
int a=0;
if(a){ //false
}
a=1;
if(a){ //true
}
a=-1
if(a){ //true
}
或者使用宏(常量)定义来自己定义一个布尔类型
#include **<stdio.h>**
#define **boolean ****int**
#define **true **1
#define **false **0
void **main() {
boolean c=true; //等价于int c=1
}
2.构造类型
枚举类型
使用enum关键字创建自定义的枚举类
enum 枚举类型名 {
枚举类型
}
#include <stdio.h>
void main() {
enum DAY {
MON=1,TUE=2,WED=3,THU=4,FRI=5,SAT=6,SUN=7
}
//使用自定义的枚举
enum DAY day;
//赋值
day=SUN;
printf("%d",day);//输出7
}
数组类型
#include <stdio.h>
void main() {
char arr1[] = {'a','a','a'};
char arr2[10] = {'b','b','b'};
printf("\n%s",arr1);//输出:aaa5ÿ,乱码了
printf("\n%s",arr2);//输出:bbb
printf("\n");
}
刚刚的代码中,arr1数组长度为3,每个元素都存储了数据,是没问题的,但是c中,读取字符串需要手动停止。也就是char arr1[] = {'a','a','a','\0'},在数据的后一个元素空间写入\0表示停止读取。这样才不会乱码。所以字符数组存在问题
arr2数组定义了10个元素,只有3个元素空间放入了数据。这种时候,由于有空闲的空间,c会默认在后方加入\0,也就是 char arr2[10] = {'b','b','b','\0'};
字符数组
如果需要存储字符串,按如下方式,这种方式将自动创建字符数组,并保证数组末尾的元素始终是\0,来保证不会出现乱码
char str[] = "aaa";
printf("\n%s",str);//输出:aaa
printf("\n%d",str[0]);//输出:97
字符指针
字符指针可以存储字符串。
char* pStr = "hello";
字符指针存储字符串的原理也是使用数组来存储,只不过在指针变量的内存地址中,存储的是这个数组的第一个元素的内存地址