iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言数据类型与sizeof关键字实例分析
  • 327
分享到

C语言数据类型与sizeof关键字实例分析

2023-06-30 02:06:43 327人浏览 八月长安
摘要

这篇文章主要介绍“C语言数据类型与sizeof关键字实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言数据类型与sizeof关键字实例分析”文章能帮助大家解决问题。一、前言介绍C语言当中的

这篇文章主要介绍“C语言数据类型与sizeof关键字实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言数据类型与sizeof关键字实例分析”文章能帮助大家解决问题。

一、前言

介绍C语言当中的数据类型,并由此引出C语言当中的另外一个重要的关键字sizeof .

二、数据类型

1、数据类型有哪些

C语言的数据类型包括基本类型(内置类型)、构造类型(自定义类型)、指针类型以及空类型

C语言数据类型与sizeof关键字实例分析

2、为什么要有数据类型

为什么要有内置类型

我们日常生活中会遇到各种各样的场景,而不同的场景需要不同数据来表示,比如我们聚餐的人数、天气的温度、海拔的高度等事情通常用整数来描述,而像人的身高、广播的频率、商品的价格则通常用小数表示,又比如我们的车牌号、楼栋的命名、服装的尺码则需要要用字母来表示;C语言作为第一门高级程序设计语言,为了能准确描述我们生活中各种各样的场景,就有了整形、浮点型、字符型这些内置类型。

为什么要有自定义类型

我们以自定义类型中的数组类型和结构体类型举例:
数组类型:我们生活中会碰到许多相同类型的集合,比如一个学校学生的学号,每一个学生的学号都是整形,那么为了表示所有学生的学号,就势必要定义几千个整形,显然,那样太麻烦了,于是就产生了数组类型,一个数组里面的每个元素的类型都是相同的,我们在定义一个学校学生的学号时,只需要定义一个有几千个元素大小的数组即可,而不必去慢慢定义一千个整形
结构体类型:我们生活中所要描述的对象常常是复杂数据类型的集合,拿人来说,一个人有姓名、性别、身高、体重、年龄等等,这些数据类型都是不同的,那么为了能够系统的描述一个人的属性,就产生了结构体类型,它把一个人不同类型的数据都集中到一个新的类型当中,使对象描述和使用更加方便。

3、如何看待数据类型

从前面的博客中我们知道,定义变量的本质是在内存中开辟一块空间,用来存放数据,而今天我们知道不同的变量是需要定义为不同的类型的,把二者结合起来,我们就不难得出:类型决定的是变量开辟空间的大小。
这时有两个疑问点,第一、为什么要根据类型来开辟空间,我们直接开辟一块空间,将内存整体使用不好吗?答案是:不好。

原因主要有两点:

在任何时刻,你的电脑都不是只在运行你目前所使用的那个程序,还有其他许多的程序也在同时运行,如果把整块都分配给了你目前运行的程序,其他程序就崩溃了。
2、即使把整块内存都分配给你,你也不能保证在任何时刻都对该内存块全部都用完,这样就会导致内存的浪费。
第二、我们使用部分内存,使用多少由什么决定的?答案是:是由你的场景决定,你的计算场景,决定了你使用什么类型的变量进行计算。你所使用的类型,决定了你开辟多少字节的空间大小。这也是为什么C语言要有这么多的数据类型,就是为了满足不同的计算场景。
最后,那么不同的数据类型到底在内存开辟多少空间呢?这就需要使用我们的关键字 – sizeof 来计算了。

三、sizeof – 计算不同类型变量开辟空间的大小

1、内置类型开辟的空间大小

`#include<stdio.h>int main(){    printf("%d\n", sizeof(char));       //1    printf("%d\n", sizeof(short));      //2    printf("%d\n", sizeof(int));        //4    printf("%d\n", sizeof(long));       //4    printf("%d\n", sizeof(long long));  //8    printf("%d\n", sizeof(float));      //4    printf("%d\n", sizeof(double));     //8}`

C语言数据类型与sizeof关键字实例分析

2、自定义类型开辟的空间大小

数组大小

#include<stdio.h>int main(){    int arr1[10] = { 0 };       //40    char arr2[10] = { 0 };      //10    long int arr3[10] = { 0 };  //40    long long arr4[10] = { 0 }; //80    float arr5[10] = { 0 };     //40    double arr6[10] = { 0 };    //80    printf("%d\n", sizeof(arr1));    printf("%d\n", sizeof(arr2));    printf("%d\n", sizeof(arr3));    printf("%d\n", sizeof(arr4));    printf("%d\n", sizeof(arr5));    printf("%d\n", sizeof(arr6));    return 0;}

C语言数据类型与sizeof关键字实例分析

从上面的结果我们很容易得出:数组的大小 = 数组元素的类型乘以元素个数

其他自定义类型的大小

#include<stdio.h>struct Test1{    int a;    char b;    float c;    double d;};uNIOn Test2{    int m;    char n;};enum Test3 {    monday,    tuesday,    wednesday,    thursday,    frifay};int main(){    struct Test1 test1 = { 0 };    union Test2 test2 = { 0 };    enum Test3 test3;    printf("%d\n", sizeof(test1));   //24    printf("%d\n", sizeof(test2));   //4    printf("%d\n", sizeof(test3));   //4}

C语言数据类型与sizeof关键字实例分析

想必上面的结果与一些小伙伴心中的结果有所不同,确实,结构体、联合体、枚举这些自定义类型的大小和数组大小的求法是不相同的,其具体的求法涉及内存对齐、大小端、内存分配等相关知识,这些知识比较复杂,我会放在自定义类型详解模块中为大家讲解,现在大家不用去深究。

3、指针类型开辟的空间大小

C语言数据类型与sizeof关键字实例分析

C语言数据类型与sizeof关键字实例分析

大家可以看到,我们上面不管指针的类型是什么(整形、字符型、浮点型、数组型),指针的大小始终是四个字节或者八个字节(第一张图X86表示32位平台,结果为4,第二张图X64表示64位平台,结果为8),所以结论就是:指针在32位平台下是4个字节,在64位平台下是8个字节。(至于为什么是这样,这涉及到内存编址、地址线等相关知识,这一部分我会放在指针那里来详细讲解,现在大家只需要记住这个结论即可)
注:第二张图有警告是因为我的电脑是32位平台的,强制转成64位会发生大小不匹配的问题。

4、空类型开辟的空间大小

C语言数据类型与sizeof关键字实例分析

我们可以看到虽然这里编译器报错了,但它仍然打印出来了void的大小:0个字节
注:void类型的大小为0个字节,这仅仅是在visual studio这个编译器下运行的结果,但是,这个结果在不同的编环境下跑出来可能不同,就比如在linux环境下,void类型的大小就为1,(由于水平的限制,这里暂时不能为大家演示);而导致这两者之间有差异的根本原因是不同编译环境对C语言的支持程度不同。

四、对sizeof 的进一步理解

1、sizeof 为什么不是函数

C语言数据类型与sizeof关键字实例分析

C语言数据类型与sizeof关键字实例分析

从上面我们可以看到,我们可以用 sizeof(a) 和 sizeof(int) 求一个整形的大小,这种方式也是大家所熟悉的,但是我们发现直接用
sizeof a 也能求出a的大小,而不需要圆括号,所以说,sizeof 是关键字(操作符)但是不是函数,因为函数参数需要用 () 起来才能正常使用。
注:sizeof int 报错是因为 sizeof 和 int 都是关键字,而不能用一个关键字去求另一个关键字的大小

2、sizeof 的其他使用

C语言数据类型与sizeof关键字实例分析

这里我们定义了一个整型变量 a 和 指针变量 p ,以及数组 arr,可以看到 a 的大小为 4,arr 的大小为40,这些我们都理解,
那么剩下的sizeof &sect; 、sizeof(&arr) 、sizeof(arr) / sizeof(arr[0]) 是什么意思呢?下面为大家解释(涉及指针相关知识)

p 是一个指针变量,里面存放的是 a 的地址,arr数组名表示arr数组首元素的地址(记忆),&arr 表示取出整个数组的地址,相当于一个数组指针,所以sizeof&sect; 和 sizeof(&arr) 都是求的指针的大小,而在上面我们知道,指针在32位平台下是4个字节,所以这里结果为4。
最后,sizeof(arr) 求整个数组的大小,sizeof(arr[0]) 求第一个元素的大小,所以二者相除得到的是数组的元素个数10。
注:这里用sizeof(arr[0]) 来求一个数组元素的大小,而不是用arr[1] 、arr[2] 是因为我们不知道数组有几个元素,所以可能arr[1] 、arr[2] 根本不存在,但是只要定义了数组,那么arr[0] 就是一定是存在的,也就是说,这样做是为了安全

关于“C语言数据类型与sizeof关键字实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网其他教程频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: C语言数据类型与sizeof关键字实例分析

本文链接: https://www.lsjlt.com/news/327149.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言数据类型与sizeof关键字实例分析
    这篇文章主要介绍“C语言数据类型与sizeof关键字实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言数据类型与sizeof关键字实例分析”文章能帮助大家解决问题。一、前言介绍C语言当中的...
    99+
    2023-06-30
  • C语言数据类型与sizeof关键字
    目录一、前言二、数据类型1、数据类型有哪些2、为什么要有数据类型3、如何看待数据类型三、sizeof – 计算不同类型变量开辟空间的大小1、内置类型开辟的空间大小2、自定...
    99+
    2024-04-02
  • C语言详细分析讲解关键字enum与sizeof及typedef的用法
    目录一、枚举类型的使用方法二、sizeof 关键字的用法三、typedef 的意义四、小结一、枚举类型的使用方法 enum 是 C 语言中的一种自定义类型enum 值是可以根据需要自...
    99+
    2024-04-02
  • c语言深度解剖(数据类型关键字)
    1. 前面说点话上一个章节嵌入式Linux:c语言深度解剖(入门篇)zhuanlan.zhihu.com写完后,很多看完的人都想把我按在地上摩擦,咬牙切齿不足解恨,但是也有很多人表示支持,在此,鄙人表示感谢。这个章节说下C语言的关...
    99+
    2023-06-03
  • C语言的static关键字应用实例分析
    这篇文章主要介绍“C语言的static关键字应用实例分析”,在日常操作中,相信很多人在C语言的static关键字应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言的static关键字应用实例分析...
    99+
    2023-06-30
  • C语言中数据类型的示例分析
    这篇文章将为大家详细讲解有关C语言中数据类型的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。(壹) 数据类型介绍前面我们已经学习了基本的内置类型,以及他们所占存储空间的大小。:类型的意义...
    99+
    2023-06-29
  • C语言详解关键字sizeof与unsigned及signed的用法
    目录最冤枉的关键字sizeof理解被误解为函数sizeof(int)*p 表示什么意思signed与unsigned 关键字有符号整数vs无符号整数整形在内存的存储原码反码补码存储的...
    99+
    2024-04-02
  • C语言中sizeof与整型数据存储及数据类型取值范围
    这篇文章主要讲解了“C语言中sizeof与整型数据存储及数据类型取值范围”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中sizeof与整型数据存储及数据类型取值范围”吧!1.关键字si...
    99+
    2023-07-02
  • Python集合与字典数据类型实例分析
    这篇文章主要讲解了“Python集合与字典数据类型实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python集合与字典数据类型实例分析”吧!前言集合数据类型是没有顺序的简单对象的聚集...
    99+
    2023-06-29
  • JavaScript基础语法与数据类型实例分析
    这篇文章主要讲解了“JavaScript基础语法与数据类型实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript基础语法与数据类型实例分析”吧!一、JavaScript语...
    99+
    2023-06-29
  • GO 语言:如何定义实时关键字的数据类型?
    在计算机科学中,实时关键字是指在特定时间内非常重要的数据,比如股票市场数据、气象数据、交通数据等。这些数据需要及时地被处理和分析,以便及时地做出决策。GO 语言是一种非常适合处理实时关键字的语言,本文将介绍如何定义实时关键字的数据类型。 ...
    99+
    2023-08-12
    实时 关键字 数据类型
  • c语言中提供的合法数据类型关键字有哪些
    c语言中提供的合法数据类型关键字有:char:声明字符型变量或函数。double:声明双精度变量或函数。enum:声明枚举类型。float:声明浮点型变量或函数。int:声明整型变量或函数。long:声明长整型变量或函数。short:声明短...
    99+
    2024-04-02
  • Go语言基础数据类型实例代码分析
    这篇文章主要讲解了“Go语言基础数据类型实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言基础数据类型实例代码分析”吧!布尔型布尔型是Go最简单的数据类型,因为布尔型只有两个...
    99+
    2023-07-05
  • C语言深入探究sizeof与整型数据存储及数据类型取值范围
    目录1.关键字sizeof2.整型数据存储深入3.数据类型取值范围深入1.关键字sizeof sizeof 与 strlen 是我们日常打代码时经常使用到的两个“工具&r...
    99+
    2024-04-02
  • R语言数据类型与相应运算的示例分析
    这篇文章主要为大家展示了“R语言数据类型与相应运算的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“R语言数据类型与相应运算的示例分析”这篇文章吧。一、常量与变量1.常量  &n...
    99+
    2023-06-29
  • C语言volatile关键字的作用与示例
    目录写在前面volatile和内联汇编的volatile的选择写在前面 版本信息:Linux操作系统,x86架构,Linux操作系统下GCC9.3.1版本。GCC 9.3.0手册。 ...
    99+
    2023-05-15
    C语言volatile关键字 C语言volatile
  • C语言字符串实例分析
    本篇内容主要讲解“C语言字符串实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言字符串实例分析”吧!看下面这个我们熟知的也是最先学习的代码"Hello world!"...
    99+
    2023-06-29
  • js数据类型之数字类型的示例分析
    这篇文章主要介绍了js数据类型之数字类型的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我们具体介绍一下js的数据类型其中一种。一、...
    99+
    2024-04-02
  • Go数据类型实例分析
    本篇内容介绍了“Go数据类型实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!每一个变量都有数据类型,Go中的数据类型有:简单数据类型:...
    99+
    2023-06-30
  • Python数据类型实例分析
    本篇内容主要讲解“Python数据类型实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python数据类型实例分析”吧!一、内容概要字符串(str)列表(list)元组(tup)字典(di...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作