1
#include <stdio.h>
#include <math.h>

int size = (int) sqrt(4);
int arr[size];

int main() {
  return 0;
}

そして私は得た:

test.c:5: error: array bound is not an integer constant

誰かが私を助けることができますか?

4

3 に答える 3

5

可変サイズの静的ストレージを備えた配列(たとえば、「グローバル」配列)を定義することはできません。配列に自動ストレージがある場合(関数内の配列の場合)、VLAとして機能します。

icepackが正しく指摘しているように、VLAはC99で正式に導入されました。

于 2013-03-27T09:50:08.427 に答える
2
int arr[size];

これにより、一定のサイズの配列が定義されます。ただしsize、の呼び出しによって計算されたsqrtため、Cプログラムの実行方法による定数ではありません。

コンパイラは、プログラムのグローバルメモリレイアウトを作成するために、配列の大きさを知る必要があります。したがって、sqrt実行時まで延期することはできません。また、Cには、コンパイル時に解決できる「数学」関数の概念はありません。

これを実行する唯一の方法は、自分で計算を実行し、結果(2)を直接ソースコードに入れることです。

于 2013-03-27T09:49:56.313 に答える
-1
const int size=(int) sqrt(4);

事前に計算された定数で十分です。ただし、配列サイズもこの定数も変更できません。

于 2013-03-27T09:52:35.583 に答える