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

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日

相关文章

  • jenkins忘记管理员账户密码如何解决?

    Jenkins忘记管理员账户密码如何解决? Jenkins是一个流行的开源自动化工具,它支持持续集成和持续交付管道。管理员账户是Jenkins的最高权限账户,可以管理系统的设置和配置等。但有时候,管理员会忘记他们的密码,这会成为管理员访问Jenkins的一个问题。在本文中,我们将讨论管理员忘记密码的情况,并提供解决方案。 解决管理员忘记密码的方法 方法一:使…

    其他 2023年3月28日
    00
  • android设置alpha值来制作透明与渐变效果的实例代码

    Android 中设置 alpha 值可以实现透明及渐变效果。下面分别介绍两种示例: 示例1:实现透明效果 可以通过修改 alpha 值来实现透明效果。alpha 的范围从 0(完全透明)到 1(完全不透明)。 1. 创建布局文件 创建一个 LinearLayout 布局文件,然后将它的 android:background 属性设置为一个颜色值,以便更容易…

    其他 2023年4月16日
    00
  • 访问编码后的中文URL返回404错误的解决方法

    当我们访问编码后的中文URL时,有时会遇到404错误的情况,这是由于服务器未对编码后的URL进行解码导致的。解决这种问题的方法是对URL进行解码,使其转换回中文字符。 下面是解决“访问编码后的中文URL返回404错误的解决方法”的完整攻略: 步骤一:确认是否是URL编码问题 访问编码后的URL时,如果出现404错误,可以先确认是否是URL编码的问题。可以通过…

    other 2023年6月26日
    00
  • CAD怎么使用构造线? CAD构造线画法

    CAD(计算机辅助设计)是一种广泛应用于工程和设计领域的软件工具,用于创建和修改数字模型。在CAD中,构造线是一种用于辅助绘图和设计的特殊线型。下面是关于如何使用构造线以及CAD构造线画法的详细攻略: 使用构造线的目的 构造线在CAD中的主要目的是辅助绘图和设计过程。它们通常用于以下几个方面:1. 辅助定位:构造线可以用于确定几何图形的位置和方向,帮助用户精…

    other 2023年8月6日
    00
  • 聊聊boost python3依赖安装问题

    接下来我将详细讲解“聊聊boost python3依赖安装问题”的完整攻略。 首先了解boost python3 Boost Python3 是将 C++ 库和 Python 解释器连接的一种工具。使用 Boost Python3 可以使得 C++ 来开发 Python 模块。在 boost.python 第一版中,一些 Python/C API 都封装成了…

    other 2023年6月26日
    00
  • matplotlib.pyplot.plot详解

    matplotlib.pyplot.plot详解 在数据可视化领域中,matplotlib库是一个非常重要的工具。而其中最重要的一个模块就是pyplot,它提供了非常强大的绘图功能。plot函数则是其中最为基础和实用的函数之一,可以实现各种各样的数据可视化效果。这篇文章将带你深入了解plot函数的用法和技巧。 简要介绍 plot函数的主要参数有x轴数据,y轴…

    其他 2023年3月28日
    00
  • Win10开机后无限重启不能进入系统的解决方法

    Win10开机后无限重启不能进入系统的问题,可能会发生于电脑硬件故障、系统文件损坏、电源故障等原因,接下来我会详细讲解几种常见的解决方法,包括: 使用安全模式修复系统 创建Win10可启动U盘进行修复 检查硬件设备是否损坏 恢复系统到上一个稳定状态 以下是详细步骤: 使用安全模式修复系统 1.在电脑重启时,在出现Windows标志之前,按F8键进入高级启动选…

    other 2023年6月27日
    00
  • pandas读取xlsx

    以下是“pandas读取xlsx的完整攻略”的详细讲解,过程中包含两个示例说明的标准Markdown格式文本: pandas读取xlsx的完整攻略 pandas是Python中一个强大的数据处理库,可以方便地读取和处理各种数据格式。本将介绍如何使用pandas读取xlsx文件。 1. 安装pandas 在使用pandas之前,我们需要先安装它。可以使用以下命…

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