为什么我被否决了?他想更改一个变量并在函数调用后保留状态。(他没有指定变量是类的成员还是其他任何东西,所以我假设它不是。如果他澄清并不太含糊地陈述他的问题,我会改变我的答案。)
你这是错的。要在函数作用域结束后保留变量,您必须将其分配在堆上而不是堆栈上。您可以使用new
ormalloc
来执行此操作,但您还必须按顺序使用delete
and释放此内存。free
new
和delete
:_
#include <iostream>
void modify(int * p){
(*p)++;
}
int main(void){
int * pointer = new int;
*pointer = 5;
std::cout << *pointer << std::endl;
modify(pointer);
std::cout << *pointer << std::endl;
delete pointer;
return 0;
}
和malloc
和free
:
#include <iostream>
#include <cstdlib>
void modify(int * p){
(*p)++;
}
int main(void){
int * pointer = (int*)malloc(sizeof(int)); //DO NOT CAST IN C
*pointer = 5;
std::cout << *pointer << std::endl;
modify(pointer);
std::cout << *pointer << std::endl;
free(pointer);
return 0;
}
new
确实提供了快速删除数组的工具,并且总体上更适合正常使用 C++。