如何删除c ++程序中的变量?我有一个简单的int list[10];
,我想删除它并将其更改为int list[9]
。我会使用矢量,但我仍然想知道如何做到
答案 0 :(得分:11)
如果你有这样的声明:
int list[10];
没有办法“删除”它。它可以是全局变量,具有静态分配的存储,也可以是存储在堆栈中的局部变量。
我不确切地知道你想要完成什么,但也许这样的事情会帮助你解决这个问题:
int *list = new int[10]; // allocate a new array of 10 ints
delete [] list; // deallocate that array
list = new int[9]; // allocate new array with 9 ints
正如您在问题中所建议的那样,使用std::vector
,std::list
等等而不是使用原始C风格的数组时,您几乎总是会更好。
答案 1 :(得分:5)
这不称为删除变量,而是重新定义变量的类型。这在C ++中是不可能的。一旦建立了变量类型,就无法更改。
有几种方法可以模拟或解决此问题......
list
切换到int*
并在堆上分配它的内存。这样可以将其重新定义为不同的大小,而无需更改其类型。答案 2 :(得分:2)
如果你的数组是在堆上分配的,那么:
int *L = new int[10];
delete[] L;
L = new int[9];
没有“删除”在堆栈上声明的局部变量的概念。
答案 3 :(得分:2)
要在C ++中删除数组,您需要使用delete[]
运算符。请参阅this link。
你要小心。你拥有的是一个静态数组。当您使用delete
或delete[]
时,它必须是动态分配的变量(使用new
制作的变量)。要做到这一点:
int* list = new int[10];
//...Code...
delete[] list;
list = new int[9];
如果delete
,请不要忘记new
! (理想情况下,你应该使用管理的东西,所以你不能忘记,就像你说的那样)。
答案 4 :(得分:0)
您
int list[10];
是静态的。声明为变量的数组是C ++中的静态对象,你不能删除/创建它们......这是一个编译时间。
您需要将数组显式声明为数组对象,比如说
int *list=new int[10];
虽然它仍然会声明一个声明,但它不是:新的操作数将触发mem分配代码)... 如果你想分配更多或更少的空间,你需要先释放它:
delete[] list;
然后使用新操作数创建一个新的(同一int
类型)
答案 5 :(得分:-1)
当然,你总是可以这样做:
{
int list[10];
... 'list' has 10 elements ...
{
int list[9];
... 'list' has 9 elements ... other 'list' inaccessible
}
... 'list' 10 elements ... other 'list' non-existent.
}
无法想象你为什么会这样。