You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写可自主获取二维数组行数的函数

二维静态数组行数计算实现方案

前置说明

该方案仅适用于编译期确定大小的静态分配二维数组,动态申请(malloc/new)的二维数组无法通过数组本身直接计算行数,需自行维护长度变量传递。

两种主流实现方式

1. C++ 模板实现(类型安全,推荐)

利用模板编译期自动推导数组维度的特性,不需要额外传参,不会出现数组退化成指针导致的计算错误:

template <typename T, size_t ROW, size_t COL>
size_t get_2d_array_rows(T (&arr)[ROW][COL]) {
    return ROW;
}

调用示例:

#include <iostream>
int main() {
    char arr[5][5];
    std::cout << "行数:" << get_2d_array_rows(arr) << std::endl; // 输出5
    return 0;
}

2. C 语言宏实现

C语言没有模板特性,可通过宏计算总大小和单行大小的比值得到行数:

#define GET_2D_ARRAY_ROWS(arr) (sizeof(arr) / sizeof(arr[0]))

调用示例:

#include <stdio.h>
int main() {
    char arr[5][5];
    printf("行数:%zu\n", GET_2D_ARRAY_ROWS(arr)); // 输出5
    return 0;
}

注意:该宏只能在数组声明的同作用域使用,如果数组被退化为指针传入其他函数,sizeof(arr)会得到指针的大小(64位系统下为8字节),计算结果会出错。

常见踩坑提醒

  • 函数形参写为char arr[5][5]时,实际会被编译器退化为char (*arr)[5]类型的指针,在该函数内无法直接计算数组行数
  • 指针形式的动态二维数组(如char **arr)无法用上述方法计算行数,需单独维护行数变量传递

内容的提问来源于stack exchange,提问作者LordObnoxious

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:09:03