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

二维动态数组COLS与ROWS命名正确性及索引含义问询

二维动态数组的命名与索引疑问

以下代码创建了一个二维动态数组:

#include <iostream>

#define COLS 3
#define ROWS 3

int ** create2d()
{
    int index = 1;
    int** arr = new int*[COLS];
    for (size_t i = 0; i < COLS ; i++)
    {
        arr[i] = new int[ROWS];
        for (size_t j = 0; j < ROWS ; j++)
        {
            arr[i][j] = index++;
            printf("%d (%d) [%d][%d]\t", arr[i][j], &arr[i][j], i,j);
        }
      printf("\n");
    }
  
    return arr;
}

int main()
{
    int** arr = create2d();
    for (int i = 0; i < COLS; i++) 
    {
        delete[] arr[i];
    }
    delete[] arr;
    return 0;
}

输出结果

./main
1 (34979536) [0][0] 2 (34979540) [0][1] 3 (34979544) [0][2]
4 (34980608) [1][0] 5 (34980612) [1][1] 6 (34980616) [1][2]
7 (34980640) [2][0] 8 (34980644) [2][1] 9 (34980648) [2][2]

从输出结果可见,数组元素的增量与元素地址的增量相匹配。

问题

  1. 代码中的COLS和ROWS命名是否正确?
  2. 若命名正确,是否意味着在arr[p][q]中,左侧索引p始终可视为列,右侧索引q始终可视为行?

解答

  1. 命名不正确。从代码实现逻辑来看:

    • new int*[COLS]创建了包含COLS个指针的数组,每个指针对应一行元素;
    • 每个指针指向的数组大小为ROWS,即每行包含ROWS个列元素。
      这说明实际逻辑里COLS代表行数,ROWS代表列数,和变量名的字面含义完全相反,属于命名错误。
  2. 即使命名正确,也不能得出“左侧索引p始终是列,右侧q始终是行”的结论。二维数组的索引含义完全由代码的定义逻辑和业务场景决定:

    • 行业惯例中通常采用arr[行号][列号]的顺序,但这只是约定俗成的写法,C++语法并没有强制规定索引的含义;
    • 开发者完全可以根据需求定义arr[列][行]的结构,只要代码逻辑自洽即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:17:11