0

配列を作成し、次のように値を配列に入れました

int *ptr_int;
int list_int[10];
int i;
for (i=0; i<10; i++)
    list_int[i] = i + 1;

list_intそして、このように配列に値を代入します

list_int[17] = 18;

次のように配列の数を取得しようとしたとき

int size = sizeof(list_int ) / sizeof( int );
printf( "The size of int is %d.\n", size);

結果は のみ10です。

アレイの部屋数を取得するにはどうすればよいですか?

4

4 に答える 4

6

結果はわずか10です。

それが実寸です。割り当てlist_int[17]は未定義の動作であり、魔法のように配列を拡張しません。

于 2013-10-08T07:59:34.343 に答える
1
list_int[17] = 18;

配列サイズが 10 しかないため、これは未定義の動作です。

可変長配列を除いて、sizeofoperator はコンパイル時の演算子であることに注意してください。との結果はsizeof(list_int )sizeof(int)コンパイル時に決定されます。


動的サイズの配列を実装するには、配列を動的に割り当てる必要がありreallocます。かなり役立つ場合があります。

于 2013-10-08T08:01:07.767 に答える
1

次の定義で、配列の最大サイズを10としてすでに定義しています

int list_int[10];

に値を割り当てることはできませんlist_int[17]。定義list_int[17]した配列のメモリが不足しているためlist_int[10]です。

要素には 0 から 9 までの値のみを割り当てることができます

于 2013-10-08T08:01:19.117 に答える
1

動的配列を作成するには (実行時に割り当てられます)

int n; 

scanf("%d",&n); // read n from the user at run time 

int* x=(int*)malloc(sizeof(int)*n);  // where n is the number of elements you need to allocate

////// after that you can access the array (x) using indexer 

///// reading loop 
for(int i=0;i<n;i++)
scanf("%d",&x[i]);

================================================== =============================

注:各エントリにメモリを割り当てることができるより動的なデータ構造が必要な場合は、リンクされたリストを使用できます

于 2013-10-09T10:27:40.140 に答える