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

相关文章:

  • 扩展:React 项目执行 yarn eject 后的 config 目录结构详解
  • Kotlin 内联函数(Inline Functions):性能优化与实战指南
  • CSS3 遮罩
  • 嵌入式Linux I2C驱动开发详解
  • 架构、构架、结构、框架之间有什么区别?|系统设计|系统建模
  • Golang 应用的 CI/CD 与 K8S 自动化部署全流程指南
  • TCPIP详解 卷1协议 九 广播和本地组播(IGMP 和 MLD)
  • geoserver发布arcgis瓦片地图服务(最新版本)
  • cursor 出现 unauthorized request
  • 编译原理AST以Babel为例进行解读、Webpack中自定义loader与plugin
  • 主流编程语言中ORM工具全解析
  • 区块链钱包开发全解析:从架构设计到安全生态构建
  • edge设置位IE模式打开网页
  • BMIDE部署失败 BMIDE Deploy failure
  • uniapp使用npm下载
  • WebRTC:去中心化网络P2P框架解析
  • DICOM 网络服务实现:医学影像传输与管理的技术实践
  • Node和npm初学
  • GitHub 趋势日报 (2025年05月11日)
  • M0基础篇之串口
  • AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent
  • Kotlin与Ktor构建Android后端API
  • PyTorch实战(4)——卷积神经网络(Convolutional Neural Network, CNN)详解
  • 10. Spring AI PromptTemplate:从模板到高级技巧
  • 单词短语0512
  • 反转链表 - 简单
  • Java面试全记录:Spring Cloud+Kafka+Redis实战解析
  • C++核心编程解析:模板、容器与异常处理全指南
  • nestjs[一文学懂如何在nestjs中对npm功能包封装]
  • Linux_文件操作命令