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

二维数组为何能以一维形式传递打印?const columns作用解析

void printArray(int arr[], int size)
{
  for (int i =0; i< size; i++)
  {
    printf("%d ",arr[i]); // 原代码此处缺少右括号,编译时需补充才能正常运行
  }
}
int main()
{
  int const columns = 3;
  int const rows = 2;
  int grades [][columns] = 
  {
    {12,23,45},
    {64,78,89}
  };
  for(int i =0; i<rows; i++)
  {
    printArray(grades[i],columns);
    printf("\n");
  }
  return 0;
}
问题解答

1. 为什么grades[i]用单下标就能传给printArray?

C语言里的二维数组本质是数组的数组。grades是包含2个元素的数组,每个元素本身又是一个包含3个int的一维数组。grades[i]指代的就是二维数组里的第i行(也就是那个一维数组),它会自动退化为指向该行第一个元素的指针,而printArray的参数int arr[]等价于int *arr(数组作为函数参数时会退化为指针),所以类型完全匹配,能正常传参。

2. columns固定为3为什么能正常运行?

你混淆了「元素个数」和「下标值」。columns=3是告诉编译器二维数组每行有3个元素,同时在调用printArray时,它是告诉函数要遍历3个元素(下标从0到2刚好是3个),而不是让它取下标为3的元素。这个参数是用来控制循环次数的,不是下标索引,所以传3完全正确。

3. 为什么输出是整行而非最后一个元素?

看printArray的逻辑:循环从i=0开始,到i<size结束(也就是i取0、1、2),会依次打印arr[0]、arr[1]、arr[2],也就是整行的所有元素。你误以为会输出最后一个元素,是错把columns当成了下标,但它实际是每行的元素总数,所以函数会遍历完一整行的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:21:05