在 c++ 数组末尾添加一个值
Posted
技术标签:
【中文标题】在 c++ 数组末尾添加一个值【英文标题】:Adding one value at the end of c++ array 【发布时间】:2021-02-07 22:57:24 【问题描述】:我想在 C++ 数组中再添加一个值,我有这段代码:
void print_array(int *array, int size)
for (int i = 0; i < size; ++i)
std::cout << array[i] << ' ';
std::cout << '\n';
void add_to_array(int *array, int size, int value)
int *newArr = new int[size + 1];
memcpy(newArr, array, size * sizeof(int));
delete[] array;
array = newArr;
array[size + 1] = value;
int main(int argc, char const *argv[])
int *array = new int[10];
array[0] = 0;
array[1] = 1;
array[2] = 2;
array[3] = 3;
array[4] = 4;
array[5] = 5;
array[6] = 6;
array[7] = 7;
array[8] = 8;
array[9] = 9;
print_array(array, 10);
add_to_array(array, 10, 11);
print_array(array, 11);
我运行它时没有收到任何错误,但输出非常奇怪:
0 1 2 3 4 5 6 7 8 9
0 0 -307888112 32767 4 5 6 7 8 9 1041
任何想法我该如何正确地做到这一点?
我知道 stl 列表中的向量,但我不能使用它们,所以不建议这样做
【问题讨论】:
宁可使用std::vector<int> array(10);
和push_back()
在末尾添加元素。
【参考方案1】:
C++ 的函数参数是所传递内容的副本,更改它们不会影响所传递的内容。您应该使用引用来让函数更改传递的内容。
另请注意,现在新数组有size + 1
元素,最后一个元素的索引是size
,而不是size + 1
。
固定代码:
void add_to_array(int *&array, int size, int value) // add & to make "array" a reference
int *newArr = new int[size + 1];
memcpy(newArr, array, size * sizeof(int));
delete[] array;
array = newArr;
array[size] = value;
【讨论】:
肯定会更好,但是当我第二次打印时,第 10 位的值是 0,而不是函数中的 pessed 值。我可以在主要更改它。如何修复? @F.Hand 修复新元素的索引。以上是关于在 c++ 数组末尾添加一个值的主要内容,如果未能解决你的问题,请参考以下文章