当前位置: 首页 > 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) 来获取缓冲区的长度,这是不正确的。

 

相关文章:

  • 国内外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. 轮转数组