malloc函数
在数组分配空间的时候,如果十个例子九个是10个元素以内,但是有一个却为100+的,如果为了这一个数组而创建一个很大的数组,那么显然是不合理的,所以我们还要有其他的方式来创建一个动态数组。
比如vla数组(变长数组),就是一个不错的选择,今天我们还有另外一个更好的选择,malloc函数。
vla数组参见之前的博客:变长数组——VLA
和vla数组一样,动态数组不是将一个小数组拓展成一个大数组,而是在创建的时候才确定数组的大小。
函数原型:
void *malloc(size_t);//size_t是一种类型,是sizeof运算符的返回值
size_t到底是什么,这个不是重点,只要知道参数是要分配的空间大小即可。
(一般来说是unsigned int用typedof重命名来的)
重点是前面的返回值,void指针。
void指针是什么
void无类型,要是创建一个这样的变量,系统不知道该分配多少空间,就会报错;如果是指针,那么就可以指向任意一个空间,但是呢在解引用void指针时,问题又来了,系统又不知道指向的空间多大了。。。所以还是报错
强转void指针
为了进行解引用,我们就需要使用类型强转,和其他类型强转一样,加一个括号就行了。
int x = 5;
printf("%d",(float)x);
void *p = &x;
printf("%d",*(int *)p);
这样第二个输出就是5了。
所以我们也可以用相同的方式来使用malloc函数
in