在C++中正确定义数组

Properly defining arrays in C++

本文关键字:定义 数组 C++      更新时间:2023-10-16

我试图为float定义一个未知大小的数组,但不了解malloc()函数的工作原理,有人能告诉我它应该是什么样子以及它是如何工作的吗?

根据这里的输入代码,我知道它应该看起来像

float * input;
input = new float [];

但我得到错误:"input"没有命名一个类型

要在C++中分配数组,请使用:

size_t array_size = 1024 //Or whatever you need
float* input = new float[array_size]
//... Do some things...
delete[] input

但是,既然您使用的是C++,那么只需使用std::vector,就不用担心删除任何数组:

std::vector<float> input;
input.push_back(10.2) //Add more things this way, or reserve ahead of time.

严格来说,您不能"分配一个未确定大小的数组"。在C/C++中,您只能定义一个指向内存区域(即数组的底层实现)的指针:

float* input;

在这一点上,您所拥有的只是一个指向浮点型数据的指针,该指针不指向任何内容,因此,在使用新关键字(仅限C++)为数组实际分配内存之前,您不能"使用"该数组:

input = new float[1024];

请注意,必须指定要分配的数组的长度,所以不能使用长度不确定的数组。如果你想使用一个像容器一样的结构,并且增长速度很快,可以考虑请改用std::list或std::vector。

如果你在编译时知道数组的大小,你就可以静态地定义数组,而不需要动态的内存分配:

float input[1024];

这样,数组将在堆栈上,而不是在堆上,并且当变量超出范围时,它将像通常的变量一样弹出。