2016-03-30 7 views
0
#include <iostream> 
using namespace std; 

void main() 
{ 

    int numDays; 
    double sum = 0; 
    double avg; 
    cout << "Enter the number of days of sales"; 
    cin >> numDays; 
    double *Sales = new double[numDays]; 

    for (int i = 0; i < numDays; i++) 
    { 
     cout << "enter how much you sold for day " << i << endl; 
     cin>>*Sales; 

     sum = sum + *Sales; 

     cout << Sales; 
    } 

    delete[] Sales; 
    avg = sum/(numDays); 
    cout << "the sum is" << sum << endl; 
    cout << "the avg is" << avg << endl; 
} 

こんにちは、これは、私が得ることができる理由は、ポインタがインクリメントされる必要がない理由を説明することができますか?ポインタを使って同じタスクを実行する正しい方法です。配列ポインタダイナミックC++

Enter the number of days of sales2 
enter how much you sold for day 0 
1 
0050CD70enter how much you sold for day 1 
2 
0050CD70the sum is3 
the avg is1.5 
Press any key to continue . . . 

答えて

0

これにはいくつかのスタイルがあります。

double *Sales = new double[numDays]; 
for (int i = 0; i < numDays; i++) 
{ 
    cout << "enter how much you sold for day " << i << endl; 
    cin >> Sales[i]; 
    sum = sum + Sales[i]; 
} 

または、元のポインタのコピーを保持していることを確認して、ポインタを進めることができます。次の例では、Salesのインデックスに沿ってpの宛先が行き来します。

double *Sales = new double[numDays]; 
double *p = Sales; 
for (i = 0; i < numDays; i++) 
{ 
    cout << "enter how much you sold for day " << i << endl; 
    cin >> *(p++); 
} 

(!それはnewで作成されていないので、pdeleteを使用するないを確認してください)(技術的に括弧が*(p++)で必要とされていない、実際に使用するコードの多くがあります代わりに*p++)。

+0

ねえ、なぜシネ>> *(p ++);それはインデックス1に行きませんか? – CanyoucSharp

+0

'*(p ++)'が実行されるたびに 'p'がインクリメントされて' Sales'の次のメモリアドレスを指し示します。 'i'日間に' *(p ++) 'を実行すると、' Sales'に 'i'というエントリがあります。これは、私たちに "不変の" Sales - p == i'という式を与えます。この式はコードスニペットに書かれているように常に真です。しかし、ポインターは他の人のコードを読むときに一緒に従うのは少し難しいです。ですから、私は 'Sales [i]'構文を使うことをお勧めします。 –

+0

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