2014-01-31 91 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。你正在通过它的价值。