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

C语言二维数组寻址报错修复及MIPS汇编实现求助

问题修复方案

修复后完整可运行代码

#include <stdio.h>

// 按题目要求实现的地址计算函数,返回对应元素的int类型指针
int* arrayAddress(int row, int col, int ncolumns, int* array) {
    // 用移位替代乘法:row * 5 = row * 4 + row = (row << 2) + row
    int offset = (row << 2) + row + col;
    return array + offset;
}

int main()
{
    // 初始化3行5列二维数组
    int my_array[3][5] = {
        {1, 2, 3, 4, 5},
        {6, 7, 8, 9, 10},
        {11, 12, 13, 14, 15},
    };
    // 自动计算列数,无需硬编码,修改数组列数时也不用改这里
    int ncolumns = sizeof(my_array[0]) / sizeof(int);
    int row, col;

    printf("请输入行号(取值范围0~2,对应第1~3行):\n");
    scanf("%d", &row);
    printf("请输入列号(取值范围0~4,对应第1~5列):\n");
    scanf("%d", &col);

    // 输入合法性校验,避免数组越界
    if (row < 0 || row >= 3 || col <0 || col >= ncolumns) {
        printf("输入的行列号超出数组范围!\n");
        return 1;
    }

    // 调用函数获取元素地址,把二维数组转成int*类型传参
    int* elem_ptr = arrayAddress(row, col, ncolumns, &my_array[0][0]);

    // 打印地址用%p格式符,转成void*避免警告;打印值要解引用指针
    printf("元素对应的内存地址:%p\n", (void*)elem_ptr);
    printf("元素对应的数值:%d\n", *elem_ptr);

    return 0;
}

问题逐一解决说明

    1. ncolumns参数获取问题
      你之前写的int ncolumns = my_array[][5]是非法语法,[][]是二维数组的定义语法,不能用来取值。可以通过sizeof(my_array[0]) / sizeof(int)自动计算二维数组的列数:my_array[0]是数组第一行的一维数组,sizeof得到整行的字节数,除以单个int的字节数就是列数,后续修改数组列数也不需要手动修改这个值。
    1. 三个编译警告修复
      ① 指针类型不兼容警告:二维数组名my_array本身是int (*)[5]类型(指向长度为5的int数组的指针),和int*类型不匹配,传参的时候传入首元素地址&my_array[0][0]就可以得到int*类型的指针,消除警告。
      ② 打印地址格式警告:%x是用来打印无符号整数的格式符,打印指针地址需要用%p格式符,同时要把指针转成void*类型匹配格式要求。
      ③ 打印值类型不匹配警告:指针变量存储的是地址,要获取对应地址存储的数值需要对指针解引用,加*运算符即可。
    1. 其他代码问题修复
    • 原代码把arrayAddress函数定义嵌套在main函数里,标准C不支持函数嵌套(只有GCC的扩展语法支持,兼容性差),把函数移到main函数外即可。
    • 原函数参数顺序和题目要求的原型不一致,已调整为row, col, ncolumns, array的顺序匹配要求。
    • 实现了移位替代乘法的要求:因为5等于4+1,row * 5可以替换为(row << 2) + row,左移2位等价于乘4,加row后等价于乘5,完全替代乘法运算。
    • 增加了输入合法性校验,避免用户输入超出范围的行列号导致数组越界访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:45:04