[c语言日寄]赋值操作对内存的影响

devtools/2025/2/7 15:03:18/

在这里插入图片描述

【作者主页】siy2333
【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是进阶开发者,这里都能满足你的需求!
【食用方法】1.根据题目自行尝试 2.查看基础思路完善题解 3.学习拓展算法
【Gitee链接】资源保存在我的Gitee仓库:https://gitee.com/siy2333/study


文章目录

  • 前言
  • 题目引入
  • 分析
    • 向char类型中赋值int类型的98
    • 向char类型中赋值int类型的-1
    • 向char类型中赋值0x11-00-00-22
  • 总结


前言

在 C 语言中,赋值操作是最基础且频繁使用的操作之一。无论是简单的变量赋值,还是复杂的数据结构初始化,赋值操作都直接涉及到内存的分配、存储和访问。然而,许多初学者对赋值操作背后的具体的内存操作细节并不熟悉。

在本篇博客中,我们将通过具体的题目来深入探讨赋值操作对内存的影响,并通过实际代码示例和分析,帮助读者更好地理解 C 语言中的内存操作机制。


题目引入

#include<stdio.h>
int main() {char a;a = 98;printf("%c", a);return 0;
}

这是一个简单的代码,它运行后会打印字符’b‘。相信很多人都知道,这个函数会将变量a赋值为98,然后printf函数调用a的值,即98,98对应的ASCII码为‘b’,所以会打印出‘b’。

但是,98明明是int类型的值,本应该占据4个字节,又是怎么存储到仅仅有1个字节的a中呢?在内存中发生了什么我们不知道的故事呢?

分析

向char类型中赋值int类型的98

我们打开VS2022的调试界面,使用内存和监视功能,观察内存的变化。
在这里插入图片描述
我们执行一下赋值语句,观察内存的变化:
在这里插入图片描述
int型98的二进制形式为:
00000000-00000000-00000000-01100010
16进制形式为:
00-00-00-62

此时有两种可能的内存操作发生了:

  1. 电脑将00-00-00-62储存到地址为&a的内存中。
  2. 电脑将62储存到地址为&a的内存中。

为了更进一步的了解内存的变化,我们需要修改程序来观察。

向char类型中赋值int类型的-1

我们知道,-1的原码为:10000000-00000000-00000000-00000001
反码为:11111111-11111111-11111111-11111110
补码为:11111111-11111111-11111111-11111111
16进制为:ff-ff-ff-ff

如果我们为char类型赋值-1,就可以确定前面究竟是执行了哪一种内存操作了。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0bae2在这里插入图片描述
没错,我们发现数据只有一部分被储存到地址为&a的内存中,也就是说数据在存放前就发生了截断。

那么,保留的前面字节的值,还是后面字节的值呢?

向char类型中赋值0x11-00-00-22

我们构建一个int类型的数,确保它的十六进制的值为:11-00-00-22。
这个数的二进制位:00010001-00000000-00000000-00100010
转换为10进制为285212706。

在这里插入图片描述
我们发现,只有低位的22被保留下来。
此时,我们已经理解了赋值操作的流程:在这里插入图片描述

总结

赋值操作是 C 语言编程中最基础的操作之一,但它背后涉及到复杂的内存操作机制。通过本篇博客的介绍和分析,我们希望读者能够更好地理解赋值操作对内存的具体影响。

关注窝,每三天至少更新一篇优质c语言题目详解~

[专栏链接QwQ] :⌈c语言日寄⌋CSDN
[关注博主ava]:siy2333
感谢观看~ 我们下次再见!!


http://www.ppmy.cn/devtools/156846.html

相关文章

Mac 基于Ollama 本地部署DeepSeek离线模型

最近节日期间最火的除了《哪吒》就是deepseek了&#xff0c;毕竟又让西方各个层面都瑟瑟发抖的产品。DeepSeek凭借其强大的AI能力真的是在全球多个领域展现出强大的影响力。由于受到外部势力的恶意攻击倒是deepseek官方服务不稳定&#xff0c;国内其他厂家的适配版本也不是很稳…

STM32 串口收发数据包

接线图 HEX数据包接收 文本数据包接收 代码配置 发送HEX数据包 //存储发送或接收的载荷数据 uint8_t TX_Packet[4]; uint8_t RX_Packet[4];void Serial_SendPacket(void) {Serial_SendByte(0xFF);//发送包头Serial_SendArray(TX_Packet, 4);//发送4个载荷数据Serial_SendByte…

【归属地】批量号码归属地查询按城市高速的分流,基于WPF的解决方案

在现代商业活动中&#xff0c;企业为了提高营销效果和资源利用效率&#xff0c;需要针对不同地区的市场特点开展精准营销。通过批量号码归属地查询并按城市分流&#xff0c;可以为企业的营销决策提供有力支持。 短信营销&#xff1a;一家连锁餐饮企业计划开展促销活动&#xf…

rabbitMQ数据隔离

用户管理 点击Admin选项卡&#xff0c;就会呈现rabbitMQ控制台的用户管理界面 Name&#xff1a;sde&#xff0c;也就是用户名Tags&#xff1a;administrator&#xff0c;说明sde用户是超级管理员&#xff0c;拥有所有权限Can access virtual host&#xff1a; /&#xff0c;可…

Spring Boot常用注解深度解析:从入门到精通

今天&#xff0c;这篇文章带你将深入理解Spring Boot中30常用注解&#xff0c;通过代码示例和关系图&#xff0c;帮助你彻底掌握Spring核心注解的使用场景和内在联系。 一、启动类与核心注解 1.1 SpringBootApplication 组合注解&#xff1a; SpringBootApplication Confi…

Stable Diffusion的入门介绍和使用教程

Stable Diffusion是一个文本到图像的潜在扩散模型&#xff0c;由CompVis、StabilityAI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型&#xff0c;可以生成包括人脸在内的任何图像&#xff0c;因为有开源的预训练模型&#…

基础项目实战——学生管理系统(c++)

目录 前言一、功能菜单界面二、类与结构体的实现三、录入学生信息四、删除学生信息五、更改学生信息六、查找学生信息七、统计学生人数八、保存学生信息九、读取学生信息十、打印所有学生信息十一、退出系统十二、文件拆分结语 前言 这一期我们来一起学习我们在大学做过的课程…

手写MVVM框架-实现简单v-bind

v-bind 有两种情况&#xff1a; 1.绑定的是一个简单的属性 <div :class"customClass">简单v-bind</div> 2.绑定的元素上面有表达式 <div :class"{customClass: a 1 > 2}">简单v-bind</div> 这一章我们先说第一种情况&…