gpt4 book ai didi

c++ - 指针/引用数组?

转载 作者:行者123 更新时间:2023-11-28 00:33:40 25 4
gpt4 key购买 nike

好的,我正在编写一个程序,它将对一个数组执行不同的功能。如有必要,阵列将需要更改容量。说明是:

  1. 创建一个新数组。
  2. 将旧数组中的内容复制到新数组中。
  3. 删除旧数组。

这部分是可以理解的,但我不明白的是如何保留对函数将使用的数组的引用。这是我创建新数组并移动元素的代码。

  int newSize = m_size*2;

double *tempArray= new double[newSize];
for(int i=0; i<m_size-1; i++)
{
tempArray[i] = arr[i];
}

delete []arr;
for(int i=0; i<m_size-1; i++)
{
arr[i] = tempArray[i];
}

delete []tempArray;

}

所有其他方法都使用 arr 所以我想回顾一下。指针不起作用,因为它只指向第一个元素。如何使用我的 arr 变量来引用数组?

最佳答案

在 C 和 C++ 中,动态数组通常由指向第一个元素的指针和元素的数量表示。所以我假设以下声明:

double *arr;
int m_size;

如果有机会你有arr声明为真正的数组 double arr[..] , 那么你不能做 delete []arr也不会改变它的大小!

那么你的代码应该是这样的:

int newSize = 2*m_size;
double *tempArray= new double[newSize];
for(int i=0; i<m_size-1; i++)
{
tempArray[i] = arr[i];
}
delete []arr;
arr = tempArray;
m_size = newSize;

但现在我想知道:为什么 m_size-1在循环中?

此外,您还可以:

memcpy(tempArray, arr, sizeof(*arr) * m_size)); //or m_size-1?

如果这是一个练习,这一切都很好。对于实际代码,使用 std::vector<double> 几乎总是更好和 resize()成员函数。

关于c++ - 指针/引用数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21784384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com