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

C语言跨模块调用extern二维数组时数值异常问题咨询

问题成因
  • 变量作用域遮蔽:main 函数内部定义了和全局数组同名的局部数组the_board,C 语言作用域规则下,局部变量优先级高于同名全局变量,代码中打印的并非 board.c 中初始化的全局数组。
  • 局部数组未初始化:栈上分配的局部数组没有显式初始化,存储的是栈内存的随机残留值,因此输出数值完全混乱。
解决方法

直接删除 main 函数内的int the_board[BOARD_SIZE_Y][BOARD_SIZE_X];这行局部数组定义即可,此时程序会自动引用头文件 extern 声明的、在 board.c 中完成初始化的全局数组。
若确实需要在 main 函数内单独维护一份数组副本,可定义局部数组后通过 memcpy 拷贝全局数组数据,需要引入<string.h>头文件。

修正后的main.c示例代码

#include <stdio.h>
#include "my_header.h"

int main() {
    int i, j;
    // 已删除重复的局部数组定义,直接访问全局数组
    for (i = 0; i < BOARD_SIZE_Y; i++){
        for (j = 0; j < BOARD_SIZE_X; j++) {
            printf(" %d ", the_board[i][j]);
        }
        printf("\n"); // 新增换行,按数组行输出更易读
    }
    return 0;
}

补充说明:你原本的 extern 声明、全局数组定义和初始化逻辑均没有错误,不属于链接错误范畴。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:36:01