当前位置: 首页 > 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.dtcms.com/a/240385.html

相关文章:

  • 国内外UI自动化测试工具全景分析:国产创新与国际领先工具对比
  • 俩人相向而行,何时相遇问题思考。
  • 软件定义车辆加速推进汽车电子技术的未来发展
  • 使用黑马X2C
  • leetcode刷题经验
  • python打卡day49
  • 从零手写Java版本的LSM Tree (二):KeyValue 数据结构
  • 制作一款打飞机游戏68:地面敌人
  • 使用python进行图像处理—像素级操作与图像算术(4)
  • CMake 从 GitHub 下载第三方库并使用
  • 使用python进行图像处理—图像变换(6)
  • 从零手写Java版本的LSM Tree (一):LSM Tree 概述
  • 安宝特方案丨船舶智造AR+AI+作业标准化管理系统解决方案(维保)
  • 用机器学习破解新能源领域的“弃风”难题
  • 深入理解JavaScript设计模式之单例模式
  • Unity中的对象池ObjPool/PoolManager
  • 从零手写Java版本的LSM Tree (三):MemTable 内存表
  • 如何使用CodeRider插件在IDEA中生成代码
  • 写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
  • 189. 轮转数组
  • Django RBAC项目后端实战 - 03 DRF权限控制实现
  • fpga系列 HDL : Microchip FlashPro 导出与烧录FPGA
  • C++八股 —— 单例模式
  • UE5 学习系列(一)创建一个游戏工程
  • 创建型模式-单例模式
  • “扛不住了就排队!”——聊聊消息队列在高并发系统中的那些硬核用途
  • tomcat入门
  • 免费批量抠图工具使用说明
  • 内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
  • Python训练打卡Day45