Int *array = new Int [n];这个函数到底在做什么
int *array = new int[n]; what is this function actually doing?
我对如何创建一个动态定义的数组感到困惑:
int *array = new int[n];
我不知道这是在干什么。我能看出它创建了一个名为array的指针指向一个新对象/数组int?有人能解释一下吗?
new分配存储请求的对象/数组所需的内存量。在本例中,n个int.
指针然后将地址存储到该内存块中。
但是要注意,这个分配的内存块不会被释放,除非你通过写
告诉它。delete [] array;
int *array = new int[n];
声明了一个指针,指向一个动态数组,类型为int
,大小为n
。
一个更详细的答案:new
分配的内存大小等于sizeof(int) * n
字节,并返回由变量array
存储的内存。此外,由于使用new
动态分配内存,您应该通过写入(当然,当您不再需要时)手动释放内存:
delete []array;
否则,您的程序将泄漏至少sizeof(int) * n
字节的内存(可能更多,取决于实现使用的分配策略)。
语句的基本操作如下:
- 创建包含'n'个元素的整数数组
- 在使用new操作符创建指针 时,在进程的HEAP内存中分配内存
- 返回一个有效的地址(如果所需大小的内存分配在执行此语句时可用)
它在堆上分配的空间等于大小为N的整数数组,并返回一个指向它的指针,该指针被赋值给一个名为"array"的int*类型指针
new
操作符正在为n
整数块分配空间,并将该块的内存地址分配给int*
变量array
。
new在一维数组中的一般形式如下:
array_var = new Type[desired_size];
它根据n的值分配相应的空间指针将指向数组即数组的第一个元素
int *array = new int[n];
在C/c++中,指针和数组(几乎)是等价的。int *a; a[0];
将返回*a
, a[1];
将返回*(a + 1)
但是数组不能改变它所指向的指针,而指针可以。
new int[n]
将为"array"分配一些空间
从c++ 11开始,执行此操作的内存安全方法(仍然使用类似的结构)是使用std::unique_ptr
:
std::unique_ptr<int[]> array(new int[n]);
这创建了一个智能指针,指向一个足够大的内存块,可以容纳n
整数,当它超出作用域时自动删除自己。这种自动清理是很重要的,因为它避免了代码提前退出并且永远达不到delete [] array;
语句的情况。
如果你需要一个能够动态调整大小的数组,另一个(可能是首选的)选项是使用std::vector
。当您需要未知数量的空间时,这很好,但它有一些缺点(添加/删除元素的时间不恒定)。您可以创建一个数组并向其中添加元素,例如:
std::vector<int> array;
array.push_back(1); // adds 1 to end of array
array.push_back(2); // adds 2 to end of array
// array now contains elements [1, 2]
- 调用'begin(int [n])'没有匹配函数
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 为什么 'main' 函数中的局部 int 变量会自动初始化?
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- 为什么 c++ 中的 main() 函数不采用除 int 和 void 之外的任何其他返回类型
- swap(int&, int&) 函数不起作用,当交换不使用临时变量时?
- 如何在不返回 C++ 值的情况下退出 int 函数?
- 调用 Parse int 函数时编译 parse 整数程序时出现问题
- 如何将字符串返回到主INT函数
- 为什么要使用int函数而不是void
- int 函数C++可以返回类似 "NULL" 的东西?
- C++int函数.当零是有效的返回值时,我如何检测false
- int const函数(参数)、int函数(const参数)和int函数(parameters)const之间的区别是什
- 类无法从主C++访问 int 函数
- 无法从 int 函数返回结果
- 如何将'int'函数调用到'void'函数
- 强制字符串为int函数以消耗整个字符串
- Int函数参数不能正常工作
- 删除Mat int函数(opencv)
- 为什么float参数适合int函数参数