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

C语言形参为(*array)[col]的二维数组如何获取行数及实际元素数

问题1:获取二维数组总行数(示例中为10)

C语言中数组传参会退化为指针,本身不会携带原始数组的长度信息,针对你当前的代码场景有两种可行方案:

  • 方案1:直接复用全局宏
    你当前代码中row是全局宏定义,直接在get2DLen函数中访问row宏即可得到总行数10,无需额外修改传参逻辑,适配现有代码的写法如下:
int get2DLen(char (*array)[col]){
    int total_row = row; // 直接读取全局宏即可得到总行数
    // 其他业务逻辑
}
  • 方案2:传参时携带行数(更通用,不依赖全局宏)
    如果需要函数适配不同行数的二维数组,可修改函数签名新增行数参数:
    修改后的函数定义:
int get2DLen(char (*array)[col], int total_row){
    // 直接使用传入的total_row参数即可
}

调用时传值:

int len = get2DLen(array, row);
问题2:获取数组实际有效元素个数(示例中为3)

你之前遍历判断\0的方案是逻辑错误导致不可行,正确逻辑如下:
C语言中初始化列表长度小于数组总长度时,剩余未显式初始化的元素会被自动置0,也就是示例中第4行及之后的行首元素都是\0,逐行判断首元素是否为\0,计数到第一个首元素为\0的行停止即可得到有效个数。
实现代码如下:

int get2DLen(char (*array)[col]){
    int count = 0;
    // 遍历上限为总行数,避免数组越界
    for(int i = 0; i < row; i++){
        if(array[i][0] == '\0'){
            break;
        }
        count++;
    }
    return count; // 示例中返回值为3
}

如果你的业务场景需要将空字符串(首元素为\0的行)作为有效元素存储,上述方案不适用,可选择两种替代方案:

  • 初始化数组时主动在最后一个有效元素后添加自定义哨兵标记,比如约定"__END_FLAG__"作为结束标记,遍历到该标记行停止计数
  • 新增参数传入有效元素个数,在调用方维护有效长度值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:06:03