当前位置: 首页 > news >正文

C语言数据结构笔记4:子函数中使用的sizeof 指针无法获取数组的实际大小

在子函数中使用 的sizeof 指针,无法获取数组的实际大小。

C 语言中,当数组作为函数参数传递时,它会退化为指针,导致 sizeof 操作符返回的是指针的大小而非数组的实际大小。

今天记录一下这个小问题。

目录

问题程序:

运行结果与问题解释:

 

问题程序:

 sizeof(Buffer) 返回的是指针的大小,而不是数组的长度。

/**  指针退化问题 * */
#include <stdio.h>
#include <string.h>void print_buffer_size(unsigned char *buffer) {// 这里 sizeof(buffer) 返回的是指针的大小,而不是数组的大小printf("Size of buffer (pointer): %zu\n", sizeof(buffer));
}int main() {unsigned char test_array[15];// 在这里,sizeof(test_array) 返回的是整个数组的大小(15字节)printf("Size of test_array (actual array): %zu\n", sizeof(test_array));// 将数组传递给函数时,它会退化为指针print_buffer_size(test_array);return 0;
}

运行结果与问题解释:

发现前后俩次计算结果不同,一个是数组长度15,但另一个则是8了:

  1. 指针与数组的区别
    • 在 C 语言中,数组名在大多数情况下会退化为指向其第一个元素的指针。
    • sizeof 操作符对数组和指针的行为不同:
      • 对于数组,sizeof 返回整个数组的字节大小。
      • 对于指针,sizeof 返回指针本身的大小(通常是 4 或 8 字节,取决于系统架构)。
  2. 代码中的问题
    • Uart_Buffer 在 FuncDeal_send 函数中是一个指针,因此 sizeof(Uart_Buffer) 返回的是指针的大小(在你的环境中可能是 8 字节)。
    • 试图用 sizeof(Uart_Buffer) 来获取缓冲区的长度,这是不正确的。

 

http://www.xdnf.cn/news/957043.html

相关文章:

  • 学习经验分享篇(3)——电机驱动电力电子方向投稿经历
  • 职场生存发展指南 | 边界 / 责任 / 社交 / 情绪
  • 个人自用debian启动
  • C语言 学习 宏命令(预处理) 2025年6月9日14:41:39
  • 【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
  • 机器人模仿学习调研
  • 处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
  • Android实践:查看远程文档
  • 数据驱动证券业务精细化决策,从洞察到行动的全链路赋能
  • IBMS集成系统 结合数字孪生技术,实现建筑的3D可视化监控与智能化运维
  • prxomox 8.3-8.4更新
  • 如何在Android Studio中导出apk文件
  • [25-cv-06277]Keith律所代理昆虫画作版权图
  • docker相关(AI回答)
  • 详解快排的四种方式
  • RT_Thread——线程管理(上)
  • 【系统架构设计师-2025上半年真题】案例分析-参考答案及部分详解(回忆版)
  • 【最新案例】智能物料称重柜/生鲜称重售卖柜系统, 共享自助管理系统, 物联网应用定制开发
  • 如何删除linux空的文件夹
  • 02__C++的基本语法
  • Unity中的Mathf.Lerp
  • ArcGIS Pro+ArcGIS给你的地图加上北回归线!
  • 安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
  • 什么是EULA和DPA
  • Android Test4 Application(Context)实例的获取
  • 深入探讨渗透测试的定义、关键步骤以及实施方法
  • 《射频识别(RFID)原理与应用》期末复习 RFID第三章 编码和调制(知识点总结+习题巩固)
  • EZDML:一款国产免费的数据库建模工具
  • [25-cv-61102]SMG律所代理Fanatics 体育用品商标维权案
  • UI学习(三)