2017-07-27 15 views
0

としてメインを作成することになっていました。 "int main(int argc、char * argve [])" 最初に型がint/long/char ")の配列のサイズがseconedで、選択された型に基づいて配列を割り当てる必要があります atoi関数easllyでサイズを取得しましたが、 の型を正しいポインタに入力する方法がわかりませんタイプ 私はこのキャスティングの仕組みと各タイプのキャスト方法を正しく理解していません。
正しい方法を説明していますか?割り当てに問題があります。

は、私はそれが変数のためのスコープに動作しますので、これまで

int main(int argc, char* argv[]) 
{ 
    int size = atoi(argv[2]); 


    if (strcmp(argv[1], "int") == 0) 
    { 
     int* arr = nullptr; 
    } 
    if (strcmp(argv[1], "long") == 0) 
    { 
     long* arr = nullptr; 
    } 
    if (strcmp(argv[1], "char") == 0) 
    { 
     char* arr = nullptr; 
    } 

} 
+0

あなたは何のキャストを持っていません!あなたは 'void * arr'を定義することになっていますか?これはverryの悪い割り当てです。 YAIT(さらに別の無能な教師) –

答えて

0

得たものthatsの。あなたの3 arr変数は3つの異なるブロックでブロックスコープになっているので、同じ名前を共有していてもそれらを3つの異なる変数として見るので、異なるタイプのものであると感じます。

人間の読者には不必要な複雑さが加わるため、現実世界のコードではうまくいかないと言われています。

1

あなたはtemplateで新しい関数を作成し、mainからそれを呼び出すことができます。

template <class T> 
int realmain(int size) 
{ 
    T *arr = new T[size]; 
    //whatever you want to do 

    delete []arr; 
    return 0; 
} 

int main(int argc, char* argv[]) 
{ 
    int size = atoi(argv[2]); 


    if (strcmp(argv[1], "int") == 0) 
    { 
     return realmain<int>(size); 
    } 
    if (strcmp(argv[1], "long") == 0) 
    { 
     return realmain<long>(size); 
    } 
    if (strcmp(argv[1], "char") == 0) 
    { 
     return realmain<char>(size); 
    } 
} 
+0

しかし、私はどのように配列をメインagianに取得できますか? –

+0

あなたは 'main'で何をしたいのか、' realmain'(あなたはタスクに応じてより良い名前を選ぶことができます)でそれをやる必要はありません。 – mch

+0

私はあなたの解決策を理解していますが、私はそれをメインで自分自身を取得し、他の機能 –

関連する問題