2017-10-12 9 views
0

動的配列を作成し、2つのポインタをそこに格納してからスワップする必要があるクラス割り当てがあります。ポインタから渡された新しい配列の値

私はほぼ完成しましたが、何らかの理由で新しい値を配列に渡すことができません。問題は、間違っていることが分かっているコードの最後の2行ですが、それを修正しようとするとコンパイルできません。

#include <iostream> 
using namespace std; 

// Function prototype 
void exchange(int*, int*, int* Arr[]); 

int main() 
{ 

    int* Arr = new int[5], i; //Declare Dynamic Array 
    cout << "Enter Number of Elements : " << endl; 
    for (int i = 0; i < 5; i++) //setting all values in the Array to Zero. 
     scanf_s("%d", Arr + i); 
    cout << endl; 

    int a = Arr[3], b = Arr[4]; 

    cout << "The integers before swap : " << endl << endl; 
    cout << "Fourth integer equals : " << Arr[3] << endl; 
    cout << "Fifth integer equals : " << Arr[4] << endl << endl; 

    exchange(&a, &b, &Arr); 

    cout << "The integers after swap : \n" << endl; 
    cout << "Fourth integer equals : " << Arr[3] << endl; 
    cout << "Fifth integer equals : " << Arr[4] << endl; 
    delete[] Arr; //Delete Dynamic Array 

    system("pause"); 
    return 0; 
} 

void exchange(int* a, int* b, int* Arr[]) { 
    cout << "Please Enter two new intergers \n" << endl; 
    cin >> *a; 
    cout << endl; 
    cin >> *b; 
    cout << endl; 
    Arr[3] = a; //These are the problem here, when I try *a it doesn't work 
    Arr[4] = b; 
} 
+0

アドバイス - この問題を解決するには、このコードをすべて実際に使用する必要はありません。 [mcve]で作業すると、[これと似たような](https://ideone.com/yVKzy3)のように見えます。 – PaulMcKenzie

+0

最適化されたコードをありがとう。 –

答えて

0

変数「a」および「b」エクスチェンジ()関数内で更新されているが、あなたはより多くの意味を行い、正常に動作する機能、外部の配列を更新する必要があります(あなたは、それを関数を呼び出します変数を変更し、戻り値の後に配列を更新します)。ここで更新されたコードは次のとおりです。

#include <iostream> 
#include <cstdio> 

using namespace std; 

// Function prototype 
void exchange(int*, int*, int* Arr[]); 

int main() 
{ 
    int* Arr = new int[5], i; //Declare Dynamic Array 

    cout << "Enter Number of Elements : " << endl; 
    for (int i = 0; i < 5; i++) //setting all values in the Array to Zero. 
    { 
     printf("Number %d: ", i); 
     scanf("%d", Arr + i); 
    } 

    cout << endl; 

    int a = Arr[3], b = Arr[4]; 

    cout << "The integers before swap : " << endl << endl; 
    cout << "Fourth integer equals : " << Arr[3] << endl; 
    cout << "Fifth integer equals : " << Arr[4] << endl << endl; 

    exchange(&a, &b); 
    Arr[3] = a; 
    Arr[4] = b; 

    cout << "The integers after swap : \n" << endl; 
    cout << "Fourth integer equals : " << Arr[3] << endl; 
    cout << "Fifth integer equals : " << Arr[4] << endl; 
    delete[] Arr; //Delete Dynamic Array 

    system("pause"); 
    return 0; 
} 

void exchange(int* a, int* b) 
{ 
    cout << "Please Enter two new intergers \n" << endl; 
    cin >> *a; 
    cout << endl; 
    cin >> *b; 
    cout << endl; 
} 
+0

ありがとうございました。 –

0
#include <iostream> 
using namespace std; 

// Function prototype 
void exchange(int*, int*, int* Arr[]); 

int main() 
{  
int* Arr = new int[5], i; //Declare Dynamic Array 
cout << "Enter Number of Elements : " << endl; 
for (int i = 0; i < 5; i++) //setting all values in the Array to Zero. 
    scanf("%d", Arr + i); 
    cout << endl; 

int a = Arr[3], b = Arr[4]; 

cout << "The integers before swap : " << endl << endl; 
cout << "Fourth integer equals : " << Arr[3] << endl; 
cout << "Fifth integer equals : " << Arr[4] << endl << endl; 

exchange(&a, &b, &Arr); 

cout << "The integers after swap : \n" << endl; 
cout << "Fourth integer equals : " << Arr[3] << endl; 
cout << "Fifth integer equals : " << Arr[4] << endl; 
delete[] Arr; //Delete Dynamic Array 

system("pause"); 
return 0; 
} 

void exchange(int* a, int* b, int* Arr[]) { 
cout << "Please Enter two new intergers \n" << endl; 
cin >> *a; 
cout << endl; 
cin >> *b; 
cout << endl; 
Arr[0][3] = *a; //These are the problem here, when I try *a it doesn't work 
Arr[0][4] = *b; 
} 
+0

ありがとうございます。分かりました。 –

0

パラメータexchangeからint* Arr[]はポインタの配列宣言します(実際には、ポインタへのポインタを、「アレイ」は単なる慣習です)。それを修正してから、電話で&Arrから&を削除します。

明らかにすると、これはあなたのプログラム(要件が不明である)を作成しない可能性があります。は全体的に正確です;それはあなたが意図したように見えるようにするために指示した行の修正です。

+0

ありがとうございます。 –

関連する問題