雷州网站建设公司,wordpress调用自定义菜单,手机网站app制作公司,郑州网站建设 郑州网站制作下面哪种C/C 分配内存的方法会将分配的空间初始化为0
A malloc() B calloc() C realloc() D new[ ]
1) malloc 函数#xff1a; void *malloc(unsigned int size) 在内存的动态分配区域中分配一个长度为size的连续空间#xff0c;如果分配成功#xff0c;则返回所分配…下面哪种C/C 分配内存的方法会将分配的空间初始化为0
A malloc() B calloc() C realloc() D new[ ]
1) malloc 函数 void *malloc(unsigned int size) 在内存的动态分配区域中分配一个长度为size的连续空间如果分配成功则返回所分配内存空间的首地址否则返回NULL申请的内存不会进行初始化。
2calloc 函数 void *calloc(unsigned int num, unsigned int size) 按照所给的数据个数和数据类型所占字节数分配一个 num * size 连续的空间。 calloc申请内存空间后会自动初始化内存空间为 0但是malloc不会进行初始化其内存空间存储的是一些随机数据。
3realloc 函数 void *realloc(void *ptr, unsigned int size) 动态分配一个长度为size的内存空间并把内存空间的首地址赋值给ptr把ptr内存空间调整为size。 申请的内存空间不会进行初始化。
4new是动态分配内存的运算符自动计算需要分配的空间在分配类类型的内存空间时同时调用类的构造函数对内存空间进行初始化即完成类的初始化工作。动态分配内置类型是否自动初始化取决于变量定义的位置在函数体外定义的变量都初始化为0在函数体内定义的内置类型变量都不进行初始化。
这里仅针对new[]说明一下。
#include iostream
#include cstringusing namespace std;class A {
public:int a;static int b;
};
int A::b;
int main(int argc ,char* argv[])
{A *test new A;cout test-a endl test-b endl endl;int *a new int[4];for (int i 0; i 4; i)cout *a ;return 0;
}
我们看看输出
选项D是new数组的形式。new[]new的数组版要求元素对象的类型必须具有默认构造函数内建类型的“默认构造函数”是什么也不做否则将不能使用new[]。 不过C11中已经不提倡用c array。更多的是用vector代替