C语言知识小结(七)

2023-11-13

                                                    共用体


共用体是一种数据结构


结构体和共用体的区别:

       结构体:

                   结构体的各个成员会占用不同的内存,互相之间没有影响;

                   结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能存在缝隙),共用体占用的内存等于最长的成员占用的内存。


       共用体:

                   共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

                   共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值。如果对新的成员赋值,就会把原来成员的值覆盖掉。


共用体格式:

union data

{
                int a;
                char b;
                float c;
}u;



                                      内存


内存:

 配置的内存是物理器件,程序运行起来是在虚拟内存中运行                                                                         

虚拟内存分段:

            栈段、堆段、代码段(.text) 、roread段、文件映射区、内核区、数据段、.bss段


内存分类:

(1)存储类

有一些关键字专门用于描述:变量存储的地方(内存)


栈:

如:栈上变量储存关键字auto。

1、通常情况下,用占的地方,普通变量。
2、函数传参,函数参数相当于局部变量。


堆:

malloc()申请的空间在堆空间。


代码段:

函数,char *p=“12345”(可能在只读段.)


roread段:

const修饰的变量


文件映射区:

当你进程打开一个文件,就在内存中有了一个副本,更新或者操作l这个文件,保存一下,就保存在了你的硬盘上。


内核区:各自的进程彼此之间,是看不见,独想你的整个虚拟内存。所以,各自的进程里,都有一个内核区。


data段:1、static修饰的显式初始化为非0的局部变量,2、显式初始化为非0的全局变量。


.bss段:1、static修饰的初始化为0或者不初始化的局部变量2、初始化为0或者不初始化的全局变量。


static:修饰局部变量每次调用时,保留上一次的运行结果


register关键字,修饰的变量,尽可能存在寄存器里。


volatile关键字,修饰易变的变量,每次都从内存中读取数据


restrict 专用于修饰指针.


(2)作用域

花括号{}里面的变量,只能在里定义时,到你的花括号结束有效。
定义和声明有时候不会严格区分,作用域重叠时小范围优先于大范围


(3)生命周期

这个变量从诞生到消亡的一个过程。


1、栈变量:

作用域(花括号内,从你定义的那一刻直到花括号结束),函数结束就消亡了,临时的生命。


2、堆变量:

作用域(花括号内,从你定义的那一刻直到花括号结束),伴随整个程序,直到程序结束


3、代码段:

放的是函数,伴随整个程序


4、只读变量:

普通变量的作用域,伴随整个程序。


5、data段变量:

作用域:定义时,之后直到程序结束都可以用(1、全局变量,2、局部变量),伴随整个程序。


6、.bss段:同data段。


(4)链接属性


extern专用于声明。

我们很多很多文件(.c)就组成一个工程。linux操作系统,是由2万多个.c文件组成.
c语言编译链接过程:所有的.c文件,编译成了.o的目标文件(2进制),彼此是孤立的,接着就是链接器,链接起来。所有的.o的目标文件都对应一个相应>的符号。所有的符号进行链接。


在os下:

里写好的可执行文件,是别人给你写好了一段对C语言引导作用代码,加载到相应的内存。位置(地址)无关码和位置有关码


data段和.bss:

在你的C语言(宏替换之前)运行之前,(引导干的)你的.data段已经被赋值,.bss段被清0.


全局变量:

链接属性是外链接(文件级别),而加了static修饰的全局变量就变成了,本文件链接属性(内链接)


函数:

默认是外链接,static修饰的函数变成了内链接,只在本文件起作用。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言知识小结(七) 的相关文章

  • 【华为OD机试真题 python】组装新的数组【2023 Q1

    题目描述 组装新的数组 给你一个整数M和数组N N中的元素为连续整数 要求根据N中的元素组装成新的数组R 组装规则 1 R中元素总和加起来等于M 2 R中的元素可以从N中重复选取 3 R中的元素最多只能有1个不在N中 且比N中的数字都要小
  • python格式化输出,format,数据类型转换。

    输出 计算机给用户输出的内容 是一个由里到外的一个过程 例如python语言中的print函数 输入 则相反 例如input函数 一 输出有普通的输出 也有格式化输出 普通输出 类似于 print hello word 这样直接打印 格式化
  • 为高尔夫比赛砍树

    为高尔夫比赛砍树 你被请来给一个要举办高尔夫比赛的树林砍树 树林由一个 m x n 的矩阵表示 在这个矩阵中 0 表示障碍 无法触碰 1 表示地面 可以行走 比 1 大的数 表示有树的单元格 可以行走 数值表示树的高度 每一步 你都可以向上
  • 系统篇: squashfs 文件系统

    一 squashfs简介 Squashfs是一套基于Linux内核使用的压缩只读文件系统 该文件系统能够压缩系统内的文档 inode以及目录 文件最大支持2 64字节 特点 数据 data 节点 inode 和目录 directories
  • 虚幻C++ http请求

    直接上代码 Fill out your copyright notice in the Description page of Project Settings pragma once include CoreMinimal h inclu
  • 测试岗?从功能测试进阶自动化测试开发,测试之路不迷茫...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • Mock框架应用(四)-Mock 重定向请求

    例一 先新建json配置文件重定向到www baidu com 启动mock服务 description 实现重定向的请求 request uri redirect redirectTo https www baidu com respon
  • Go并发(goroutine)及并发常用模型的实现

    前言 Go 语言最吸引人的地方是它内建的并发支持 作为天然支持高并发的语言 写并发比java和python要简单方便的多 在并发编程中 对共享资源的正确访问需要精确的控制 在目前的绝大多数语言中 都是通过加锁等线程同步方案来解决这一困难问题
  • 疯壳-MTK智能电话手表开发整板测试

    目录 内容简介 3 第一节 开机 4 第二节 绑定 5 第三节 功能测试 9 3 1 屏幕测试 9 3 2 SIM通信测试 11 3 3 SIM 测试 12 3 4 GPS测试 14 3 5 手表对时 18 官网地址 https www f
  • 1449 砝码称重 51NOD

    1449 砝码称重 题目来源 CodeForces 基准时间限制 1 秒 空间限制 131072 KB 分值 40 难度 4级算法题 现在有好多种砝码 他们的重量是 w0 w1 w2 每种各一个 问用这些砝码能不能表示一个重量为m的东西 样
  • flink中idea配置pom.xml

  • JS之预解析

    javascript 的预解析 个人理解 就是js代码在执行之前 会在相应的执行环境中 预先把 一些东西解析到内存 如果理解错误 请多多指正 一 那究竟预先解析哪些东西那 答 预先解析 function 和 var 二 还有就是预解析的顺序
  • 分布式一致算法

    一 拜占庭将军问题 拜占庭将军问题 拜占庭派多支军队去围攻一个敌人 将军不确定军队中是否有叛徒 叛徒可能擅自变更进攻决定 至少一半以上的军队同时进攻才可以取胜 在这种状态下 拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商 从而就进
  • go 进阶 go-zero相关: 二. 服务启动与路由,中间件注册,请求接收底层原理

    目录 一 问题概述 二 底层源码分析 涉及到的一些结构体简介 初始化 中间件的预设置 路由注册与中间件的处理 启动服务到触发net http 接收请求的处理 三 总结 一 问题概述 了解go zero底层也是基于net http标准库实现h
  • 【树莓派】Linux内核编译

    树莓派 Linux内核编译 树莓派的Linux内核编译有两种方法 一种是在树莓派上直接编译 另一种是利用交叉编译的方法 一般我们都推荐采用交叉编译的方式进行编译 这是因为通常交叉编译Pi内核的速度比Pi本身编译快得多 性能因素 下面就讲下如
  • Maya致命错误解决方法

    因 此故障可能是由于 OpenCL 解决方案 禁用 OpenCL 通过添加 MAYA DISABLE OPENCL 1 到Maya env 复制引号里面部分 文件位于以下位置 c users username documents maya
  • Python自动合并Word文件并添加分页符的方法

    Python自动合并Word文件并添加分页符的方法 在本篇文章中 我们将介绍如何使用Python自动合并多个Word文件 并在合并后的文档中添加分页符 我们将使用Python的python docx库来处理Word文档 该库提供了丰富的功能
  • CMake动态库生成及使用

    命令行生成动态库 现有hello h 和 hello cpp文件 生成动态库 g c fPIC hello cpp hello h c 生成 o文件 fPIC 生成与位置无关的代码 动态库 g shared fPIC o libhello
  • vue——路由之路由跳转、路由传参、路由嵌套、路由模式

    相关认识 后端路由 对于前端的网络请求 不同的pathname 去执行后端的不同业务 前端路由 不同的网址对应各自的页面 vue的前端路由 SPA应用要做出路由效果 就得判断当前网址 然后切换组件 vue router就是专门做切换组件的功
  • 深入浅析TCP/IP——TCP/IP五层模型

    TCP IP五层模型 一 TCP IP五层模型 1 实体层 2 链路层 3 网络层 4 传输层 5 应用层 一 TCP IP五层模型 层与协议的关系 每一层为了完成一种功能 定义了一种规则 这个规则叫作互联网协议 1 实体层 把电脑连接起来

随机推荐

  • 运维面试题-Linux基础篇

    非技术类 你对现在运维工程师的理解以及对其工作的认识 答 运维工程师在公司当中责任重大 需要保证时刻为公司及客户提供最高 最快 最稳定 最安全的服务 运维工程师的一个小小的失误 很有可能会对公司及客户造成重大损失 因此运维工程师的工作需要严
  • GPT大语言模型Alpaca-lora本地化部署实践【大语言模型实践一】

    模型介绍 Alpaca模型是斯坦福大学研发的LLM Large Language Model 大语言 开源模型 是一个在52K指令上从LLaMA 7B Meta公司开源的7B 模型微调而来 具有70亿的模型参数 模型参数越大 模型的推理能力
  • 了解log4j日志平台

    log4j jar 写日志 log4j commonslog logback slf4j 通用的日志平台 推荐使用 还需要引入一个配置文件 log4j properties 需要放入classpath路径下 放在src下会自动加载到bin目
  • regsvr32提示模块加载失败 请确保二进制

    微软官方的一部分解释 https support microsoft com en us kb 249873 关于32位和64位的说明 http csi windows com blog all 73 windows 64 bit 378
  • 2021-05-20

    自我介绍 大家好 我是西安财经大学2019级大二的一名在校生 来自陕西省咸阳市 当时高考完在填报志愿的时候 我雨我的专业 一见钟情 计算机科学科学与技术专业 虽然有很多人告诉我说女孩子学IT这个行业不好 太辛苦太累等等 对于这些我都一笑了之
  • 多项式加法运算(链表实现)

    文章目录 创建结点类型 打印多项式 尾插 插入排序 多项式相加 代码总览 结果展示 创建结点类型 我们用链表存储一个多项式 那么该链表的每一个结点就代表多项式的某一项 所以我们的每一个结点必须包含三个信息 多项式的系数 多项式的指数以及指向
  • tf2报错解决 assertion failed: [predictions must be >= 0] [Condition x >= y did not hold element-wise:]

    环境 tf2 完整报错如下 tensorflow python framework errors impl InvalidArgumentError assertion failed predictions must be gt 0 Con
  • 理解主从设备模式(Master-Slave)

    主从设备模式 主从设备模式也叫做主仆模式英文简称为Master Slave 核心思想是基于分而治之的思想 将一个原始任务分解为若干个语义等同的子任务 并由专门的工作者线程来并行执行这些任务 原始任务的结果是通过整合各个子任务的处理结果形成的
  • 安卓APP_ Fragment(3)—— Fragment的生命周期

    摘自 安卓APP Fragment 3 Fragment的生命周期 作者 丶PURSUING 发布时间 2021 04 16 22 32 12 网址 https blog csdn net weixin 44742824 article d
  • LINUX进程启动时自动挂载调试

    对于某些多进程的应用 子进程是有主进程拉起来的 此时想对子进程的启动流程打断点就比较麻烦 如果在子进程启动时调试器自动挂载就完美了 网上找到了gdbhelpers的开源工具库 其对gdb的现有命令集做了扩展 有一个工具是实现预挂载的 原理也
  • (PPT+官方解读):中国移动5G终端产品2021年要这么干!

    以下内容来自官方解读 1 2020 年终端产品发展回顾 2020 年新冠疫情全球蔓延 生产和生活受到冲击也带来很多改变 应该说这是不平凡的一年 也是在这一年的不断努力之下 中国移动 5G 终端交出了一份还算不错的答卷 中国移动网内 5G 手
  • Html常用正则表达式

    Html常用正则表达式 匹配帐号是否合法 字母开头 允许5 16字节 允许字母数字下划线 a zA Z a zA Z0 9 4 15 验证用户密码 a zA Z w 5 17 正确格式为 以字母开头 长度在6 18之间 只能包含字符 数字和
  • Linux 其他用户(非root用户)设置root权限及免密(Centos7为例)

    在linux系统中我们经常要创建一些非root用户来完成一些特定的操作 有时我们需要执行一些root用户才能执行的命令 这时我们需要给该用户设置root的权限 下面将演示如何操作 1 首先创建一个test用户 root smiletian
  • Postman导出和导入接口

    1 点击Export导出接口 2 点击Export 3 导出成功 4 导入操作 import 5 选择导入文件 7 导入成功
  • vue element的el-select下拉框赋值之后无法选择

    watch监听form applicant applyUnit里值的变化 赋值给form project disposalType 但发现下拉框不能再次选择 watch form applicant applyUnit handler va
  • 2013年9月22日星期日(准备工作:分离ddraw的math和interface)

    在之前 要进行下封装 好吧 先加个类 ddraw math类吧 顺便把ddraw引擎中的几个矩阵弄到ddraw math类中来 让接口和数学相分离开 头文件有这些 pragma once a 2D vertex typedef struct
  • 表单提交时,get,post用哪种方式,如何设定?

    一般来说 使用 HTTP 的 POST 方法来提交表单 因为 POST 方法可以将表单数据作为请求正文发送到服务器 而 GET 方法将表单数据包含在请求 URL 中 在 HTML 中 可以通过在
  • 【裸机开发】UART 串口通信(二)—— 使用 UART 收发数据

    这节其实就是在对上一篇文章涉及到的一些操作进行整理和归纳 不一定完全按照上一篇的顺序来 目录 一 UART IO 初始化 二 UART 初始化 1 打开 关闭串口 2 软件复位 3 总结 UART 初始化 三 接收数据 四 发送数据 一 U
  • 【STM32】LCD液晶显示

    作者 一只大喵咪1201 专栏 STM32学习 格言 你只管努力 剩下的交给时间 LCD显示 LCD简介 TFTLCD驱动原理 ILI9341 液晶控制器简介 液晶屏的信号线及 8080 时序 使用 STM32 的 FSMC 模拟 8080
  • C语言知识小结(七)

    共用体 共用体是一种数据结构 结构体和共用体的区别 结构体 结构体的各个成员会占用不同的内存 互相之间没有影响 结构体占用的内存大于等于所有成员占用的内存的总和 成员之间可能存在缝隙 共用体占用的内存等于最长的成员占用的内存 共用体 共用体