2017-04-07 11 views
3

array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}と宣言しています。後で私はそれがarray[8] = {2, 3, 4, 5, 6, 7, 8, 9}になりたい。配列の位置から再割り当てできますか?

最初の2つの要素を消します。したがって、それはarray[2]で始まります。 arrayarray[2]に再割り当てします。

私が試した:

int *array=(int*)malloc(10*sizeof(int)); 
...//do stuffs 
array=(int*)realloc(array[2],8*sizeof(int)); 

それは動作しませんでした。 &array[2], *array[2]を使用したり、補助配列を作成したりしないで、ArrayをAuxArrに空き(AuxArr)よりも再割り当てしてください。

光が出ますか?

答えて

6

すでにalloc'edされているメモリブロックへのポインタのみを再割り当てできます。したがって、配列(配列)はreallocできますが、配列[2]はメモリブロックの中央にある場所へのポインタなので、配列は使用できません。

代わりにmemmoveを試してみるとよいでしょう。

編集:ThingyWotsitのコメントに応じて、配列の前に置いておきたいデータをメモした後、reallocして末尾を削除することができます。

+0

Memmove!それ以前に考えたことがあります、ありがとう –

+0

質問はよく再指定されていません。長さ{2、3、4、5、6、7、8、9、9、9} – ThingyWotsit

0

array += 2またはarray = &array[2]をそのまま使用してください。 realloc()はできません。

+0

コンパイラ拡張は配列の名前で、Cのlvalueですか? – Gerhardh

+0

彼は動的に割り当てられた配列を使用しています。これは、より多くのスペースを持つポインタmalloc()を超えています。 –

+0

あなたはそうです。私は 'array [10]'部分に気を取られました。 – Gerhardh

関連する問題