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

如何用C语言为多维数组添加全1的外围行和列

核心问题说明

C语言没有提供类似Python append 这类可以动态扩容数组的内置函数,原生数组的长度在声明时就已经固定,无法在运行时直接修改大小。你需要手动创建一个维度更大的新数组来实现加边框的需求。

实现逻辑

  • 原数组为n行m列,加上全1边框后,新数组的维度为 (n+2)行 * (m+2)列,上下各新增1行、左右各新增1列全1元素
  • 可以先将新数组所有元素初始化为1,再将原数组的元素逐个复制到新数组的中间区域(对应位置偏移1行1列,即原数组arr[i][j]对应新数组new_arr[i+1][j+1])
  • 最后直接打印新数组即可得到带边框的结果

注意:你现有代码的打印逻辑存在数组越界访问:原数组只有n行m列,但打印循环执行到了n+1行、m+1列,访问到了数组之外的内存空间,会输出垃圾值甚至触发程序崩溃。

完整可运行代码

#include <stdio.h>
int main()
{
    int n,m;
    printf("Lines: ");
    scanf("%d" , &n);
    printf("Columns: ");
    scanf("%d", &m);
    int arr[n][m];

    // 输入原数组元素
    printf("Input array elements: \n");
    for (int i=0 ; i<n ; i++)
    {
        for(int j=0 ; j<m ; j++)
        {
            printf("arr[%d][%d]=",i,j);
            scanf("%d" , &arr[i][j]);
        }
    }

    // 创建带边框的新数组,维度为n+2行,m+2列
    int new_arr[n+2][m+2];
    // 第一步:将新数组所有元素初始化为1(边框直接就是1,不用额外处理)
    for(int i=0; i<n+2; i++){
        for(int j=0; j<m+2; j++){
            new_arr[i][j] = 1;
        }
    }
    // 第二步:把原数组元素复制到新数组的中间区域
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            new_arr[i+1][j+1] = arr[i][j];
        }
    }

    // 打印带边框的数组
    printf("Array with 1-border: \n");
    for (int i=0 ; i<n+2 ; i ++) {
        for(int j=0; j<m+2; j ++) {
            printf("%d\t", new_arr[i][j]);
        }
        printf ("\n");
    }

    return 0;
}

补充说明:上述代码使用了C99标准支持的变长数组特性,如果需要兼容C89等更老的标准,需要改用malloc动态分配内存创建新数组。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:45:02