2014-01-31 89 views
1

所以我有這樣的代碼,但它不輸出,加上第4個值後,正確的東西,就好像這一切被刪除,並不會添加,直到下一次運行增加值動態數組

#include <iostream> 

using namespace std; 

const int DEFAULT_CAPACITY = 2; 

void addValue(int data[], int& logSize, int& physSize, int newValue) 
{ 
    // DATA DICTIONARY 
    int *temp; 

    if (logSize == physSize) 
    { 
     physSize *= 2; 
     temp = new int[physSize]; 

     for (int i = 0; i <= logSize; i++) 
     { 
      temp[i] = data[i]; 
      cout<<temp[i]<<endl; 
     } 

     delete [] data; 
     data = temp; 
    } 

    data[logSize] = newValue; 

    for (int i = 0; i <= logSize; i++) 
    { 
     cout<<data[i]<<endl; 
    } 

    logSize++; 
} 

void printData(int data[], int logSize) 
{ 
    cout<<endl; 
    cout<<"ARRAY DATA:"<<endl; 

    for (int i = 0; i < logSize; i++) 
    { 
     cout<<data[i]<<endl; 
    } 
} 

void main() 
{ 
    //DATA DICTIONARY 
    int *data; 
    int logSize; 
    int physSize; 
    int newValue; 
    char choice; 

    physSize = DEFAULT_CAPACITY; 
    logSize = 0; 
    data = new int[physSize]; 

    do 
    { 
     cout<<"What would you like to do?"<<endl; 
     cout<<"(A)dd value to array"<<endl; 
     cout<<"(D)isplay all values"<<endl; 
     cout<<"(Q)uit"<<endl; 

     cin>>choice; 

     if (choice == 'A' || choice == 'a') 
     { 
      cout<<"What integer do you want to add? "; 
      cin>>newValue; 
      addValue(data, logSize, physSize, newValue); 
     } 

     if (choice == 'D' || choice == 'd') 
     { 
      printData(data, logSize); 
     } 

     cout<<endl; 

    } while (choice != 'Q' && choice != 'q'); 
} 
+0

使用[std :: vector](http://www.cplusplus.com/reference/vector/vector/)。除非明確使用引用(並且不能引用數組),否則C++參數傳遞通常是[傳值](http://en.wikipedia.org/wiki/Pass-by-value) –

+0

@BasileStarynkevitch - this是一個任務,不能使用向量。 – cb1295

+0

這裏的問題究竟是什麼?你能更具體地瞭解發生了什麼?提供基本的輸出等... – Durandal

回答

4

,你可以和應該使用std::vector<int>且不說,data被作爲指針通過了價值這裏:

void addValue(int data[], int& logSize, int& physSize, int newValue) 

(爲int data[],讀int* data)。所以`addValue有它自己的指針副本,並且它所做的任何操作都不會影響調用方。您可以通過引用傳遞指針解決這方面的問題:

void addValue(int*& data, int& logSize, int& physSize, int newValue) 
+0

對!工作完美,謝謝。猜猜我需要回顧指針和工作如何工作的整個操作。 – cb1295

1

reference傳遞data。你正在通過它的價值。