我想在 C 中的多維陣列周圍添加一行和一列 1。
對于輸入 1,2,3,4,5,6,7,8,9 - 這就是我想要添加的方式。C 中有沒有像 python 中的 append 這樣的函式,或者如何做到這一點?

我已經擁有的用于向用戶詢問元素和列印的代碼:
#include <stdio.h>
int main()
{
int n,m;
printf("Lines: ");
scanf("%d" , &n);
printf("Columns: ");
scanf("%d", &m);
int arr[n][m];
// Input Elements
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]);
}
}
// Show Elements
for (int i=0 ; i<n 1 ; i ) {
for(int j=0; j<m 1; j ) {
printf("%d\t", arr[i][j]);
}
printf ("\n");
}
return 0;
}
謝謝
uj5u.com熱心網友回復:
陣列的大小在其生命周期內不會改變。即使您使用可變長度陣列,“可變”一詞也意味著大小保存在變數中,而不是大小本身是可變的。
因此,您必須創建一個新的填充陣列并填充它:
// add 2 to each dimension due to 1-element-wide strips on each side
int padded[n 2][m 2];
// copy data from the old array
for (int i = 0; i < n; i)
for (int j = 0; j < m; j)
padded[i 1][j 1] = arr[i][j];
// fill padded area
for (int j = 0; j < m 2; j)
padded[j][0] = padded[j][m 1] = 1;
for (int i = 0; i < n 2; i)
padded[0][i] = padded[n 1][i] = 1;
這段代碼可以很容易地移動到使用 VLA 引數的更通用的輔助函式中:
void pad_matrix(int n, int m,
int pad_size, int pad_val,
int src[n][m],
int dst[n 2 * pad_size][m 2 * pad_size]) {
for (int i = 0; i < n 2 * pad_size; i) {
for (int j = 0; j < m 2 * pad_size; j) {
// position in src
int ii = i - pad_size;
int jj = j - pad_size;
if (0 <= ii && ii < n && 0 <= jj && jj < m)
dst[i][j] = src[ii][jj];
else
dst[i][j] = pad_val;
}}
}
用法可能是:
int padded[n 2][m 2];
pad_matrix(n, m, 1, 1, arr, padded);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327472.html
上一篇:a[0]指向哪里?
