所以我有这段代码,但它没有输出,在添加第 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');
}
最佳答案
您可以而且应该使用 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)
关于c++ - 向动态数组添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21473784/