2017-01-19 19 views
1

それぞれが4つの要素を持つ2つの配列を作成する必要があります。 1つの配列にはユーザからの値が4つあり、もう1つの配列には最初の配列の要素へのポインタが含まれています。このライン上のC++ポインタの配列が割り当てられない

array type 'int *[4]' is not assignable

:私は、次のエラーを取得しておく。ここ

my_ptrs = &my_ints; 

は私のコードです:

#include <iostream> 
#include <algorithm> 

using namespace std; 

int main() { 

    int my_ints[4]; 
    int *my_ptrs[4]; 
    float temp; 
    int num; 

    for (int x=0; x< 4; x++) 
    { 
     cout << "Enter Integer:" << endl; 
     cin >> num; 
     my_ints[x] = num; 
    } 

    my_ptrs = &my_ints; 

    for(int k=0; k<=3; k++) 
    { 
     for(int j=k+1; j<=3; j++) 
     { 
      if(my_ptrs[k]>my_ptrs[j]) 
      { 
       temp=*my_ptrs[k]; 
       my_ptrs[k]=my_ptrs[j]; 
       *my_ptrs[j]=temp; 
      } 
     } 
     cout << my_ptrs[k] << " "; 
    } 
    return 0; 
} 

答えて

0

あなたの見かけの意図は、を指すようにmy_ptrsに各ポインタを持つことです対応する値はmy_intsです。

ここには1つの割り当てを使用してショートカットはありません。

for (int i=0; i<4; ++i) 
    my_ptrs[i]=&my_ints[i]; 
+0

ありがとう!余分な質問:my_ptrs配列を昇順に印刷したい、私の最後のforループについて間違っているもの – Scott

+1

ポインタが指している値を入れ替えるか、ポインタ自体を入れ替える必要があります。 forループは、もう一方の半分の半分をしようとしています。それはうまくいかないでしょう。中間の割り当ては、おそらく '* my_ptrs [k] = * my_ptrs [j]; 'でなければならず、' temp'は 'int'でなければなりません。とにかく、「一時」が「フロート」になるのはまったく意味がありません。 –

0

しようとしているように、配列変数に配列へのポインタを割り当てることはできません。しかし、あなたの代わりに行うことができますすることのいずれかです:

  • は、直接その宣言の中で二番目の配列を初期化します。

    int my_ints[4]; 
    int* my_ptrs[4]; 
    
    for (int i = 0; i < 4; ++i) 
        my_ptrs[i] = &my_ints[i]; 
    

int my_ints[4]; 
int* my_ptrs[4] = {&my_ints[0], &my_ints[1], &my_ints[2], &my_ints[3]}; 
  • 別々のループで配列を埋めます

    あなたが何であるかに基づいて、を試してみると、( "私は昇順「)にmy_ptrs配列を印刷したい、あなただけの完全に二番目の配列を取り除く、代わりにstd::sort()アルゴリズムを使用することもできます。

    Sorts the elements in the range [first, last) in ascending order.

    #include <iostream> 
    #include <algorithm> 
    
    using namespace std; 
    
    int main() 
    { 
        int my_ints[4]; 
    
        for (int x = 0; x < 4; ++x) 
        { 
         cout << "Enter Integer:" << endl; 
         cin >> my_ints[x]; 
        } 
    
        std::sort(my_ints, my_ints+4); 
    
        for(int k = 0; k < 4; ++k) 
         cout << my_ints[k] << " "; 
    
        return 0; 
    } 
    
  • 関連する問題