最初の質問の問題は、 for サイクルの反復ごとに配列の最後の要素を 0 に設定しているため、サイクルの最初のパスの後、{1, 2, 4, 4, 0}
, nextになり{1, 2, 4, 0, 0}
ます。for ループ
の外に置くだけで十分です。arr[n - 1] = 0;
同様に:
編集:範囲外にならないようにループ制御ステートメントを更新しました、hmjdに感謝します
for(int i = 2; i < n-1; i++)
{
arr[i] = arr[i + 1];
}
arr[n - 1] = 0;
要素自体は削除されず、0 に設定され、残りは左にシフトされます。
2 番目の質問については、何かを追加するには、より大きなサイズの新しい配列を作成する必要があります。
必要なのは、malloc
関数calloc
とfree
関数です。それらと一般的な動的割り当てに慣れてください。一般的な考え方はmalloc
、calloc
現在の配列よりも 1 大きいサイズの配列を作成し、別の要素を挿入するスペースまで要素をコピーし、その要素を挿入してから、残りの配列をコピーすることです。その後、古い配列を忘れずにfree
、新しい配列へのポインタを設定してください。
int size = 4;
int arr[] = (int *) calloc(size, sizeof(int));
int insertTo = 2;
int insert = 50;
int tempArr[] = (int *) calloc(size+1, sizeof(int));
for(int i = 0, int j = 0; i < size; i++, j++) {
if(j == insertTo) {
tempArr[j] = insert;
i--; //to offset the cycle incrementation
} else {
tempArr[j] = arr[i];
}
}
free(arr);
arr = tempArr;
size++; // Don't forget to update the size
簡潔にするために割り当てチェックを省略しました。
同様のアプローチを最初の質問に使用して、配列のサイズを変更できます。