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

二维数组顺时针90度旋转:行列索引赋值编译错误求助

二维数组顺时针90度旋转的错误排查与修正方案

错误原因分析

  1. 二维数组函数参数声明不合法:C语言要求二维数组作为函数形参时,必须指定第二维的长度(如char arr[][7]),不能使用char arr[][]的形式。编译器需要第二维长度来计算元素的内存偏移地址,否则会触发expression must be a pointer to a complete object type错误。
  2. 函数调用传参错误:main函数中调用DisplayArray2D(arrRotated[7][7])是错误的,arrRotated[7][7]是数组的越界元素(数组索引范围为0~6),而函数需要接收二维数组的地址,应直接传递数组名arrRotated。
  3. 旋转逻辑错误:原代码的arrRotated[count][i] = arr[i][count]只是对数组进行转置,无法实现顺时针90度旋转的效果。

修正方案与正确代码

核心修正点

  • 修正函数参数的二维数组声明,明确第二维长度为7;
  • 修正DisplayArray2D的传参方式;
  • 调整循环逻辑,实现正确的顺时针90度映射:对于7×7数组,原位置(i, j)的元素旋转后应位于(j, 6 - i),或者通过遍历原数组的列(从下到上)赋值到旋转数组的行(从左到右)。

完整正确代码

#include <stdio.h>

void DisplayArray2D(char arr[][7]);
void RotateArray2D(char arr[][7], char arrRotated[][7]);

int main()
{
    char arrRotated[7][7];
    char arr[7][7] = 
    {
        {'*',' ',' ',' ',' ',' ',' '},
        {'*','*',' ',' ',' ',' ',' '},
        {'*','*','*',' ',' ',' ',' '},
        {'*','*','*','*','*','*','*'},
        {'*','*','*',' ',' ',' ',' '},
        {'*','*',' ',' ',' ',' ',' '},
        {'*',' ',' ',' ',' ',' ',' '},
    };

    RotateArray2D(arr, arrRotated);
    DisplayArray2D(arrRotated);
}

void DisplayArray2D(char arr[][7])
{
    int i, count;
    for (i = 0; i < 7; i++)
    {
        for (count = 0; count < 7; count++)
            printf("%c", arr[i][count]);
        printf("\n");
    }
}

void RotateArray2D(char arr[][7], char arrRotated[][7])
{
    // 顺时针90度旋转:原数组列j从下到上,转为旋转数组行j从左到右
    for (int j = 0; j < 7; j++)
    {
        for (int i = 0; i < 7; i++)
        {
            arrRotated[j][6 - i] = arr[i][j];
        }
    }
}

代码说明

  • RotateArray2D函数中,外层循环遍历原数组的列索引j,内层循环遍历行索引i,将原数组arr[i][j]赋值到旋转数组的arrRotated[j][6 - i]位置,实现顺时针90度旋转;
  • 调用RotateArray2D时,参数顺序调整为arr(原数组)在前,arrRotated(目标数组)在后,符合逻辑习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:10:38