-3

サイズという名前の変数を介して配列サイズを動的に渡しています。cでは正常に機能しますが、c ++では機能しません。理由を教えてください、よろしくお願いします。

    #include <iostream>
    #include <stdlib.h>
    using namespace std;

    int size;
    int main(int argc, char *argv[])
    {
      int i ;

      int *a[size];
      cout<<"Enter size";
      cin >> size;


     for(i =0; i < size ;i++)
      {
        cout<<"Enter value:" ;
        cin>>a[i] ;
      }

    for(i=0 ; i < size; i++)
    {
       cout<<a[i]<< " ";
     }
     system("PAUSE");   
     return 0;
   } 

適切な I/O 変更を加えて同じプログラムを実行しましたが、適切に実行されました。

また、この場合、配列宣言時にコンパイラがどのように動作するかを理解するのを手伝ってください。

4

5 に答える 5

5

私にその理由を教えてください

その理由は、C++ には可変長配列がないためです。std::vector<int>おそらく、あなたは(可能性が高い)または(可能性が低い)を探していますnew int

また、この場合、配列宣言時にコンパイラがどのように動作するかを理解するのを手伝ってください。

他の場合と同じように動作します。ソース テキストを解析し、ソース コードのセマンティクスに対応するマシン コードを出力します。可変長配列のサイズが定数としてハードコーディングされていないだけで、代わりにレジスタまたはスタック (ある種の「変数」のように) に格納され、サイズの計算 (特にポインター演算) ) は、保存された値に対して再度実行されます。

于 2013-07-27T08:52:27.930 に答える
2

あなたのコードは、初期化されていない変数から大量のメモリを割り当てようとしていますsize。その値は後でのみ割り当てられます。

int a[size];
/* ... */
cin >> size;

これらのステートメントの順序を入れ替えると、C++ コンパイラに可変長配列の拡張機能がある場合は、必要なことが行われる可能性があります。より移植性が高く、一般的に好ましい解決策は次のとおりです。

cin >> size;
std::vector<int> a(size);

編集:おそらくint[]notが必要です*int[]

于 2013-07-27T09:01:55.557 に答える
0

int *a[size];このステートメントでは、 size の配列を作成したいのですsizeが、変数を初期化してsizeいません。C++ は可変長配列をサポートしていません。次の方法で実行できます。

int size;
cin>>size;
int *a[size];

vectorまたは、メモリを動的に割り当てるSTL を使用します。

vector<int>a;

ベクトルに値を入れるには、値を押し戻すだけです

a.push_back(56);

ベクターの詳細については、このリンクをチェックしてください

于 2013-07-28T02:40:02.450 に答える