2a.C语言数据类型

216 阅读3分钟

C语言中,数据类型可分为四种:

  1. 基本数据类型
  2. 构造数据类型
  3. 指针类型
  4. 空类型四大类

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 **0void **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";

字符指针存储字符串的原理也是使用数组来存储,只不过在指针变量的内存地址中,存储的是这个数组的第一个元素的内存地址