当前位置: 首页 > 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语言没有内置机制跟踪动态数组大小。

相关文章:

  • 扩展: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基础篇之串口
  • 俄乌释放停火和谈信号,克宫:将组建“相应级别”谈判代表团
  • 一生要出片的年轻人,买爆相机
  • 马上评丨学术不容“近亲繁殖”
  • 智利观众也喜欢上海的《好东西》
  • 中国海外发展:今年前4个月销售665.8亿元,花费305亿元拿地
  • 巴基斯坦称回应挑衅,对印度发起军事行动