int*variable或int变量

Don*_*all 2 c++ pointers coding-style

我在C++工作,最近一直在使用指针.我发现有几种方法可以初始化我需要使用的内存块.

void functioncall(int* i)
{
    *i = *i + 1;
}

int main(){
    int* a = (int*)malloc(sizeof(int));
    int az = 0;

    functioncall(a);
    functioncall(&az);
}
Run Code Online (Sandbox Code Playgroud)

请注意,第一个变量int*a被声明为指针,然后我为它内存了malloc.但是,使用az它不是指针,但在调用函数时,我得到了内存的地址.

所以,我的问题是:是否有一种首选的方式=,或者是否有任何一种惩罚?

Con*_*ius 7

int* a = (int*)malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)

这会在堆上分配内存.你必须自己解除分配,否则你会遇到内存泄漏.你通过调用解除分配它free(a);.这个选项绝对比较慢(因为必须要求内存并且必须完成其他一些后台操作),但只要你自由呼叫,内存就可以使用.


int az = 0;
Run Code Online (Sandbox Code Playgroud)

这会在堆栈上"分配"内存,这意味着当你离开声明的函数时它会被自动销毁(除非是一些非常罕见的例外).你不必整理记忆.此选项更快,但您无法控制对象何时被销毁.