C语言修炼之路数据类型悟正法 解析存储定风魔下篇

yizhihongxing

C语言修炼之路数据类型悟正法 解析存储定风魔下篇攻略

一、 概述

本篇攻略将详细讲解C语言修炼之路数据类型悟正法的存储方法以及相关概念。包含如下内容:

  • 数据类型的存储方式
  • 存储定风魔机制
  • 静态存储、动态存储
  • 堆与栈的存储

二、 数据类型的存储方式

C语言中的数据类型分为两大类:基本数据类型和派生数据类型。其中,基本的数据类型包括int,char,float和double等;派生数据类型包括结构体、共用体和枚举等。

对于基本数据类型,其存储方式是直接将数据存储在内存中,而对于派生数据类型,其存储方式则是将派生类型的各种元素整合进来存储。

三、 存储定风魔机制

存储定风魔指的是在存储基本数据类型时,CPU在存储器中按照一定的方式将数据存储下来。存储定风魔主要由两个方面组成:存储顺序和字节对齐。

存储顺序分为两种:大端存储和小端存储。在大端存储中,低位字节存储在内存的高地址中,而高位字节存储在内存的低地址中;在小端存储中,低位字节存储在内存的低地址中,而高位字节存储在内存的高地址中。

字节对齐是指CPU按照某一标准将数据存储在内存中,以实现更高的存取速度。具体来说,字节对齐会将变量的起始地址对齐到某个整数倍的地址,以尽可能地减少访问内存次数。

四、 静态存储、动态存储

在C语言中,变量的存储分为静态存储和动态存储。静态存储区包括全局变量和静态变量,这些变量在程序启动时便已经确定,所以它们的内存被分配在静态存储区。而动态存储区则由程序在运行时进行分配和释放,包括堆和栈。

五、 堆与栈的存储

堆和栈都是C语言中实现动态存储的重要手段。

栈是指存储函数调用过程中变量的内存区域,通常由编译器自动管理。在函数被调用时,该函数的参数、返回地址和一些临时变量会快速地被分配到栈中,函数执行完毕后这些变量会自动被释放,所以栈的内存分配和释放非常快速,但是它的容量相对较小。

堆是指动态存储区,也就是由程序员手动申请和释放的内存区域。在堆上分配内存不需要遵循大小限制,只需要在程序运行时申请所需大小的内存即可。但是,由于堆的内存释放需要程序员自己负责,在堆上存储的数据需要由程序员自己管理内存的释放,否则会产生内存泄漏等问题。

六、 示例说明

示例一

#include <stdio.h>

int main()
{
    int a = 10;
    char b = 'A';

    printf("a 的地址是: %p\n", &a);
    printf("b 的地址是: %p\n", &b);

    return 0;
}

输出:

a 的地址是: 0x7ffe7f52abdc
b 的地址是: 0x7ffe7f52abdb

解释:此示例中,变量a和变量b的内存地址是连续的,这是因为按照存储定风魔机制,char类型的变量b只占用一个字节的内存,而int类型的变量a则占用四个字节的内存,所以它们在内存中的地址是连续的。

示例二

#include <stdio.h>

int main()
{
    int *p;
    p = (int *)malloc(5 * sizeof(int));
    for(int i = 0; i < 5; i++)
    {
        p[i] = i + 1;
        printf("p[%d] 的值是 %d, 地址是 %p\n", i, p[i], &p[i]);
    }

    free(p);

    return 0;
}

输出:

p[0] 的值是 1, 地址是 0x5630ebe209c0
p[1] 的值是 2, 地址是 0x5630ebe209c4
p[2] 的值是 3, 地址是 0x5630ebe209c8
p[3] 的值是 4, 地址是 0x5630ebe209cc
p[4] 的值是 5, 地址是 0x5630ebe209d0

解释:此示例中,我们使用malloc函数在堆上分配了一个包含5个元素的整型数组,并使用指针访问这些元素。由于在堆上分配内存时不需要遵循大小限制,所以这些元素在内存中的地址是不连续的。最后使用free函数释放申请的内存,防止内存泄漏。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言修炼之路数据类型悟正法 解析存储定风魔下篇 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 如何更改Windows11用户文件夹名字?

    如何更改Windows 11用户文件夹名字?以下是详细的步骤: 步骤1:以管理员身份运行CMD 为了更改用户文件夹的名称,需要进入Windows 11系统的管理员模式。右键单击开始按钮,在菜单中找到并点击“Windows PowerShell (管理员)”或“命令提示符(管理员)”。 步骤2:在CMD中输入mklink /J 输入以下命令将用户文件夹重命名为…

    other 2023年6月27日
    00
  • maven setting.xml文件配置禅定之旅

    下面是”maven setting.xml文件配置禅定之旅”的完整攻略。 1. 介绍 Maven是Java项目对于构建、项目管理、依赖管理和单元测试等方面的一个重要工具。Maven使用一个名为setting.xml的文件进行配置,setting.xml包含了Maven运行所需的配置信息,如镜像源、代理等等,配置setting.xml可以提高Maven构建的效…

    other 2023年6月25日
    00
  • c++错误:在’}’标记之前预期的primary-expression

    C++错误:在’}’标记之前预期的primary-expression攻略 在C++编程中,我们可能会遇到错误:在’}’标记之前预期的primary-expression。这个错误通常是由于语法错误或拼写错误起的。本攻略将介绍如何解决这个错误,并提供两个示例。 原因 在C++编程中,错误:’}’标记之前预期的primary-expression通常是由于以下…

    other 2023年5月9日
    00
  • Quartz所使用的表的说明

    Quartz所使用的表的说明 Quartz是一个强大的开源任务调度框架,它可以用来定时执行计划任务。在Quartz中,表是一个非常关键的概念,它定义了Quartz如何计算一个任务的执行时间,同时也把任务的执行时间和执行频率从代码中解耦,使得任务的调度配置变得简单和灵活。本文将对Quartz所使用的表进行详细的说明。 表的通用格式 Quartz中的表是通过一个…

    其他 2023年3月28日
    00
  • linux配置nginx.service设置nginx开机启动

    Linux配置nginx.service设置nginx开机启动 nginx是一款高性能的Web服务器和反向代理服务器,它可以处理大量的并发请求。在Linux中,我们可以使用systemd配置nginx.service,实现nginx的开机启动。以下是Linux配置nginx.service设置nginx开机启动的完整攻略,包括常见问题和两个示例说明。 常见问…

    other 2023年5月9日
    00
  • 详解android在mob平台实现qq登陆和分享

    标题:详解Android在Mob平台实现QQ登录和分享 介绍 本文将详细讲解如何在Android应用程序中使用Mob平台实现QQ登录和分享功能。Mob是一个第三方平台,可以提供各种社交媒体和服务的API接口。本文假设您已经注册了一个Mob用户帐号,并且在Mob平台上已经激活了QQ登录和分享服务。 步骤一:集成Mob SDK 首先,您需要将Mob SDK集成到…

    other 2023年6月26日
    00
  • Win10界面图标变白怎么办 win10软件图标变白的解决办法

    问题描述:Win10界面图标变白怎么办? 答:Win10界面图标变白可能由于以下原因所致: Win10系统升级或更新过程中出现异常; 启用了“快速启动”功能导致的系统异常; 某些软件损坏或被删除导致的异常; 硬件驱动异常或过期导致的异常。 下面详细讲解Win10软件图标变白的解决办法。 方法一:禁用”快速启动“功能 1.右击开始菜单,选择“电源选项”;2.点…

    other 2023年6月27日
    00
  • CMD命令详解 目录类命令(md、cd、rd、dir、path、tree、deltree)

    CMD命令详解 目录类命令(md、cd、rd、dir、path、tree、deltree) 在Windows的命令提示符中,目录类命令可用于创建、进入、删除和显示目录和文件信息。本文将对目录类命令进行详细说明。 md md 命令用于创建一个目录。其语法如下: md 目录名 例如,要在C盘上创建一个名为“test”的目录: md C:\test cd cd 命…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部