C语言—数据类型

发布于:2023-01-04 ⋅ 阅读:(268) ⋅ 点赞:(0)

数据类型知多少?

生活中,我们最常见到的各种瓶子,瓶子既有大小、又有类型,不同的瓶子,容积不同,用途也不同;类比到编程世界,这就是我们接下来要谈的数据类型,不同的数据类型,用途不同,能够装的数据大小也不同。

图片

整型

C语言中的整型可以分为两大类:有符号整型和无符号整型,反映在计算机内部,也就是二进制位最高位不同,负数为1,正数为0,但是你们有知道计算机内部数的表示是用什么样的形式表示的吗?暂时按住不讲,有兴趣的小伙伴,联系我,我们来探讨一下~

不知道有没有小伙伴,对C语言中的这些类型有没有好奇过,为什么是int表示整数类型呢?这到了考验大家的英语水平来了,英语中integer单词表示整数,C语言是老外发明的,因此大多命名都是采用英文的缩写,不过这对我们学习编程无伤大雅,大家了解就好~但是多知道一点,也没关系的哈.

废话不多说,short int从单词上也能猜到代表短整型,为什么短,因为它长得矮呗,哈哈~,开个玩笑,因为它仅仅能表示装的下2个字节,每个字节8个bit,因此它也仅仅能表示16个bit。
下面我们用程序来看一下各整型能表示的字节个数。

#include<stdio.h>
int main(){    
    printf("sizeof(unsigned short int): %d\n",sizeof(unsigned short));    
    printf("sizeof(short int): %d\n", sizeof(short));    
    printf("sizeof(unsigned int): %d\n", sizeof(unsigned int));    
    printf("sizeof(int): %d\n", sizeof(int));    
    printf("sizeof(unsigned long): %d\n", sizeof(unsigned long));  
    printf("sizeof(long int): %d\n", sizeof(long int));   
    printf("sizeof(unsigned long long): %d\n", sizeof(unsigned long long));    
    printf("sizeof(long long): %d\n", sizeof(long long));    
    return 0;
}
answer:
sizeof(unsigned short int): 2
sizeof(short int): 2
sizeof(unsigned int): 4
sizeof(int): 4
sizeof(unsigned long): 4
sizeof(long int): 4
sizeof(unsigned long long): 8
sizeof(long long): 8

short int能表示范围: -32768~32767;
unsigned short int:0~65535;
对于其他类型,你知道它的表示范围是多少吗?知道是什么怎么计算出来的吗?不懂的赶紧来私聊我~

字符型

字符型用char表示,仅能装的下8个bit,1个字节。有符号字符范围为-128127,无符号字符为0255。

浮点类型

浮点类型有三种类型,float、double及long double,其区别主要是精度范围不同,其中float的精度有效位6,double的精度有效位15位,long double的精度有效位为19。那这三种类型,需要多少字节呢?我们同样的可以使用sizeof来获取他们的大小。

#include<stdio.h>
int main()
{
    printf("sizeof(float):%d\n", sizeof(float));
    printf("sizeof(double):%d\n", sizeof(double));
    printf("sizeof(long double):%d\n", sizeof(long double));
    return 0;
}
sizeof(float):4
sizeof(double):8
sizeof(long double):16

空类型

空类型使用符号void表示,该类型比较简单。字面意思,什么都不表示。对于函数返回值,表示无返回值。用在函数参数上,表示无参数。用在指针上,表示地址,不指定数据类型,可以强制类型转换为指向任意大小数据结构的指针。

枚举类型

枚举类型使用enum表示。企业业务开发中,一般用该类型指代不同的数值常量或类型,例如要表示路由器中不同的端口。

typedef enum {
    PORT_VOID   = 0,
    PORT_OIU    = 1,
    PORT_TRUNK  = 2,
    // 新增端口从此处开始...
    PORT_TOTAL = 255,
} PORT;

派生类型

指针类型

指针是编程中专业术语,一般在C/C++语言中出现,对于刚接触编程的小朋友,概念比较抽象,不太好理解。我们可以简单的理解为小区中房子的门牌号,就是方便寻址抽象出来的概念。

根据数据类型不同,可以有不同的指针类型,例如char *,int *,float *。

数组类型

如果我们还拿瓶子举例,夏天很热,咸鱼小明去超市买了一提矿泉水(12瓶),那么这12瓶类比在编程中,就表示数组,相同类型多个数据结构,能够连续存储多个数据的类型。
例如:int array[12] 表示大小为12的整型数组,能够存储12个整型元素。

结构体类型

编程语言是为了解决现实中的问题,数组已经很强大,但他也有缺陷,不能装不同的类型数据,此时,结构体就上场,结构体就是为了让我们定义自己的数据结构类型,使用关键词struct标识。
例如我们可以定义学生结构如下:

struct Student { 
   char  name[10];     // 姓名
   char  sex[2];       // 性别
   char  studyNo[10];  // 学号
   float height;       // 身高   
   float weight;       // 体重
   short grade;// 年级
   short class;        // 班级
   char  tel[12];      // 联系方式
} STU;

共用体类型

该类型使用关键词union标识,共用体使用场合其实并不多,在企业中开发,我接触比较多的就是协议开发中,会涉及的多一些,一般就是多个字段在不同场景下只能出现一个,此时我们可以用共用体,节省内存,它一般与struct结合使用,单独使用意义不大。

typedef Struct{
    int   data1;
    float data2;
union {
    char   data3;
    double data4;
    };
    char data[4];
} ST;

函数类型

自定义函数类型一般要结合typedef来使用,我们可以定义某种类型声明的函数。例如

// 定义了返回值为空,函数参数为空的函数类型func;
typedef void (*func) (void);  
// 定义了返回值为int,函数具有两个int参数的函数类型func1;
typedef int (*func1)(int,int);

// 使用
void getValue(void);
func = &getValue;
func();

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到