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

数组作为指针计算大小时的误区

1. 正确用法:在定义数组的同一作用域内

int arr[] = {1, 2, 3, 4, 5};
int length = sizeof(arr) / sizeof(arr[0]);  // 正确:length = 5
  • 原理​:sizeof(arr)返回数组总字节数,sizeof(arr[0])返回单个元素字节数。
  • 限制​:仅适用于​原始数组​,且必须在定义数组的同一作用域内使用。

2. 常见错误:数组作为函数参数传递时

void func(int arr[]) {
    // 错误!此时arr是指针,sizeof(arr)返回指针大小(通常4或8字节)
    int wrong_length = sizeof(arr) / sizeof(arr[0]); 
}
  • 原因​​:数组作为函数参数时会退化为指针,sizeof(arr)等价于sizeof(int*)
  • 解决方案​:必须额外传递数组长度:
void func(int arr[], int length) { /* 使用length */ }

3. 动态分配数组的情况

int *arr = malloc(5 * sizeof(int));
// sizeof(arr) 仍然是指针大小,无法获取数组长度!
  • 必须手动维护长度​,C语言没有内置机制跟踪动态数组大小。
http://www.xdnf.cn/news/410977.html

相关文章:

  • Android13 wifi设置关闭后断电重启会自动打开
  • JGEW-9液位流量压力温度实验装置
  • Genspark超级智能体调研
  • 从数据到洞察:解析结构化数据处理的智能跃迁
  • 苹果电脑笔记本macos Mac安装mixly 米思齐软件详细指南
  • 免费多线程下载工具
  • 电商物流的“速度与激情”:从城际运输到即时配送的全链路解析
  • 动态网站 LNMP
  • 每日Prompt:超现实交互场景
  • 全视通智慧病房无感巡视解决方案:科技赋能,重塑护理巡视新篇
  • 开关电源滤波器讲解
  • Cursor 配置 Browser MCP(基于浏览器底层协议控制)及浏览器插件安装
  • Blender 入门教程(一):模型创建
  • rust 全栈应用框架dioxus server
  • 大模型数据分析破局之路20250512
  • 架构、构架、结构、框架之间有什么区别?|系统设计|系统建模
  • 互联网大厂Java面试实战:Spring Boot到微服务的技术问答解析
  • Datawhale AI春训营 day
  • 基于ESP32的健康智能机器人
  • 23.(vue3.x+vite)引入组件并动态切换(component)
  • 嵌入式Linux I2C驱动开发详解
  • 火山RTC 6 自定义视频
  • BUUCTF——杂项渗透之look
  • 代理IP:电商与营销领域的“隐形加速器”
  • OpenCV实现一个视频播放器
  • 基于FastAPI框架的日志模块设计
  • 2025年网站安全防御全解析:应对DDoS与CC攻击的智能策略
  • 处理 Websocket 超时问题
  • Python 处理图像并生成 JSONL 元数据文件 - 固定text版本
  • 从 JIT 即时编译一直讲到CGI|FastGGI|WSGI|ASGI四种协议的实现细节