关于sizeof相关注意点

简介: strlen是专门用来求字符串长度的,统计的是’\0’之前出现的字符个数,一定要找到’\0’才能结束,所以如果没有\0可能会存在越界访问问题

总结一下sizeof操作符的一些容易忽略的知识


1.sizeof( )内部不参与运算,内部不会真实访问空间,不会进行计算的


int main()
{
  short s = 3;
  int a = 12;
  printf("%d", sizeof(s = a + 2));
  printf("%d", s);
  return 0;
}

93cfc2e33213460ebeeae950c0594ce7.png


解析:


int main()
{
  short s = 3;//短整形
  int a = 12;//整形
  printf("%d", sizeof(s = a + 2));
  //a是整形,2是整形,相加还是整形,但s是短整形,所以最后的类型还是短整形
  //内部不会真实的进行a+2这个计算
  printf("%d", s);
  //s还是3;
  return 0;


2.sizeof()是根据类型来计算大小的,如果知道类型就知道大小


例子:


int main()
{
  int a = 10;
  printf("%d\n", sizeof(a));
  printf("%d\n", sizeof(int));
  return 0;
}

2e3229029a044a53af6ad5deb436fa63.png


例子:


int main()
{
  int arr[3][4] = { 0 };
  printf("%d", sizeof(arr[3]));
  return 0;
}

cc0cc17885fd42abb7d9ab02eed6e1b1.png


解析:


int main()
{
  int arr[3][4] = { 0 };
  //二维数组3行四列
  printf("%d", sizeof(arr[3]));
  //arr[3]表示第四行数组名,可能你们会想这个数组不是才有3行吗,这不是越界访问了吗
  //其实不是的喔,假设这个数组有第四行,那么size(第四行数组名)表示计算的第四行整个大小为16
  //想一下,sizeof()其实不会访问真实的空间,它是根据这个arr[3]这个类型来进行判断的
  //第四行类型跟第一行第二行第三行类型是一样的都是int[4]类型所以计算出来大小为16.
  return 0;
}


3.sizeof VS strlen


1.sizeof只关注占用内存空间的大小,单位是字节,不关心内存中存放的是什么

2.strlen是专门用来求字符串长度的,统计的是’\0’之前出现的字符个数,一定要找到’\0’才能结束,所以如果没有\0可能会存在越界访问问题

3.sizeof是操作符而strlen是库函数

相关文章
|
7月前
|
关系型数据库 MySQL 数据库
《深入探讨XGBoost与MySQL数据交互:细节与洞察》
在数据驱动时代,XGBoost与MySQL的数据交互至关重要。本文探讨了两者结合时的多个关键点:**数据格式适配**(如文本编码、日期处理)、**性能考量**(分批读取、索引优化)、**数据一致性与完整性**(事务管理、异常回滚)、**数据安全与权限管理**(授权访问、加密传输)、**数据更新与实时性**(触发器或轮询机制)以及**连接管理与稳定性**(连接池技术、重试机制)。全面处理这些方面,可实现高效、稳定且安全的数据交互,为数据分析和机器学习提供可靠支持。
190 28
|
存储 Go 文件存储
M.2移动硬盘打造Win To Go系统:高效分区存储文件全攻略
【10月更文挑战第12天】本文详细介绍了如何使用M.2移动硬盘制作Win To Go系统。首先,需准备合适容量与接口类型的M.2硬盘及硬盘盒,并获取Windows镜像文件和分区工具。接着,通过Rufus软件将镜像写入硬盘。文中还提供了分区策略,包括系统分区(约80-120GB)、软件分区(根据需求设定)和数据分区(剩余空间),并指导如何使用DiskGenius或Windows自带工具进行分区。最后,强调了对各分区文件的有效管理和定期备份的重要性。
1000 3
|
人工智能 搜索推荐 安全
脑机接口技术:提升人机交互的前沿探索
【9月更文挑战第29天】脑机接口(BCI)技术借助人工智能与神经科学的进步,实现了人脑与外部设备的直接连接,开辟了人机交互新纪元。该技术通过捕捉并转化神经信号,使用户能直接控制设备或接收反馈,已在医疗、教育、娱乐等领域展现巨大潜力。例如,在医疗上,它帮助患者恢复运动和语言功能;在教育中,实现个性化学习;在娱乐领域,则提供沉浸式体验。尽管面临技术、伦理及隐私挑战,但其发展前景广阔,有望革新生活方式和社会结构。
|
NoSQL Redis
Redis性能优化问题之禁用内存大页,如何解决
Redis性能优化问题之禁用内存大页,如何解决
|
存储 Java 关系型数据库
支持私有部署的云端存储双链笔记软件
Blossom —— 一个支持私有部署的云端双链笔记软件,将笔记,图片,个人计划安排保存在自己的服务器中。
300 2
支持私有部署的云端存储双链笔记软件
|
机器学习/深度学习 自然语言处理 搜索推荐
承上启下:基于全域漏斗分析的主搜深度统一粗排
两阶段排序(粗排-精排)一开始是因系统性能问题提出的排序框架,因此长期以来粗排的定位一直是精排的退化版本,业内的粗排的优化方向也是持续逼近精排。我们提出以全域成交的hitrate为目标的全新指标,重新审视了召回、粗排和精排的关系,指出了全新的优化方向
94192 3
|
监控 数据处理 API
提升DataFrame处理性能:高效数据操作的实战技巧
【5月更文挑战第19天】本文介绍了优化Pandas DataFrame性能的7个技巧:选择合适的数据类型、避免使用循环、使用查询优化、减少内存使用、利用并行处理、使用适当索引以及监控和分析性能。通过这些策略,可以提升数据处理效率,尤其适用于大规模数据集。例如,选择正确的数据类型、使用向量化操作和优化索引能有效提高DataFrame的操作速度。
|
SQL 存储 数据处理
实时计算 Flink版产品使用合集之flink-connector-mysql-cdc 和 flink-sql-connector-mysql-cdc有什么区别
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
722 1
|
Web App开发 资源调度 JavaScript
node.js详解
node.js详解
258 0
|
TensorFlow 算法框架/工具 计算机视觉
ResNet实战:tensorflow2.0以上版本,使用ResNet50实现图像分类任务
ResNet实战:tensorflow2.0以上版本,使用ResNet50实现图像分类任务
1034 0