如何用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
相关产品推荐
相关产品推荐

