首先,针对malloc函数:
函数原型:void
*
malloc
(unsigned
int
num_bytes); //分配长度为num_bytes字节的内存块
返回值是void指针,void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么数据类型(比如是char还是int或者其他数据类型),可以通过类型强制转化转化为其他任意类型指针。如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。
值得注意的是,malloc返回的是指针。并且,(int*)malloc(n*sizeof(int));语句给指针变量分配n个整型存储空间,即占了n个位置此处n个占位置等效与a[n]效果,且符合语法。
另外,自己定义的指针*num一定要给其分配地址:
malloc的原型是
void * malloc(int size); // void*表示函数返回值为任意类型,size是分配的内存单元字节数
- 1
当如果不给p分配内存地址,它就会变成“野指针”,进而导致程序崩溃。
2.。。由于malloc只分配空间,初始化时却赋随机值,因此常用memset()对malloc赋0:
memset是对字节进行操作的*
void * memset ( void * p, int c, size_t n);
其中,指针p为所操作的内存空间的首地址,c为每个字节所赋的值,n为所操作内存空间的字节长度,也就是内存被赋值为c的字节数