-1

次のプログラムの配列宣言がわかりません。

int main(){
  int n;
  printf("How many numbers?");
  scanf(" %d",&n);
  int array['n'];
  for(int i = 0; i < n; i++)
  {
    scanf(" %d",&array[i]);
  }
  for(int i = 0; i < n; i++)
  {
    printf(" %d\n",*(array +i));
  }
  getch();
  return 0;
}
4

3 に答える 3

1

に置き換えint array['n']int array[n]、C コンパイラを使用してコードをコンパイルしていることを確認すると、問題なく動作します。サイズが一定でない自動割り当て配列はVLAと呼ばれ、14 年前の C99 で導入されました。

于 2013-03-14T12:27:08.680 に答える
0

'' 構文は、その ascii 値に置き換えることを意味します。それで

int array['n'];

実際には:

int array[110];

( asciiの 'n'=110 として)

n < 110 である限りこれは機能しますが、それがコーダーの意図したものであるとは思えません!

おそらくint array[n];ここでの意図でした。の欠如mallocは、配列がヒープではなくスタック上に作成されることを意味します。(さらに読む: c でのメモリ管理)。

コンパイルされないのにint array['n'];コンパイルされる理由は、配列のサイズが定数である必要があるためです。int array[n];「n」は定数 (110) ですが、n はそうではありません。

EDIT:多くのユーザーがこれに気付いたので、私はそれを綴るかもしれません.定数配列サイズの制限はコンパイラ固有です. 最新の純粋な C コンパイラでは許可されていますが、c++ コンパイラでは許可されていません。VLAが一般的に良いアイデアであるかどうかの問題は、いくつかの議論の問題です。

于 2013-03-14T12:10:51.353 に答える