2016-03-30 126 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; 
} 

嗨,這是我得到的輸出可以somone解釋爲什麼指針不需要增加?以及用指針完成相同任務的正確方法。數組指針動態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]; 
} 

或者您可以前進一個指針,確保保留原始指針的副本。在下一個示例中,p的目標沿着Sales的指數蠕變。 (請確保使用上pdelete,因爲它不是用new創建!)

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++); 
} 

(從技術上講不需要在*(p++)括號,而實際上有很多的代碼,使用而不是),而不是)。

+0

嘿,但爲什麼cin >> *(p ++);這不會去索引1? – CanyoucSharp

+0

每次執行'*(p ++)'時,'p'遞增以指向'Sales'中的下一個存儲器地址。如果''(p ++)'爲'i'天,那麼''銷售''中有'i'條目。這給了我們一個「不變的」銷售 - p == i,一個在寫入的代碼片段中總是爲真的等式。但是在閱讀其他人的代碼時,指針有點難以遵循。所以我只是推薦你使用'Sales [i]'語法。 –

+0

非常感謝! – CanyoucSharp