一、内存分配函数
1、void * malloc(参数(需要分配的内存空间的大小));
void * malloc(参数1(元素所占用空间大小) * 参数2(元素个数));不会进行清零操作
2、void * calloc (参数1(元素个数), 参数2(每个元素所占用空间大小));
会进行清零操作
3、void * realloc(参数1(需要再次分配内存空间的指针),参数2(需要再次分配内存大小,可以写成“sizeof(元素类型)* 元素个数”);
会将之前分配的内存释放掉,重新分配后把原来内存空间的值拷贝到新地址如果直接把新分配的地址覆盖原来的地址是有风险的,一旦内存分配失败,原来的值就丢失了;为了防止分配失败导致原来的内容丢失,可以申明一个中间变量来保存新地址,分配成功后再将新地址赋给旧地址;
例如:
int *p = malloc(sizeof(int) * 5); //分配5个sizeof(int)大小的地址
int *Newp = realloc(p, sizeof(int) * 5); //在p的基础上再分配5个sizeof(int)大小的地址,并赋值给p1
if(p != NULL); //判断内存是否分配成功
p = Newp; //p已经在上一步被realloc函数释放,将p1的值赋给p
4、释放内存
free(p);
5、防止野指针问题:
p = NULL;
二、函数的指针
1、函数保存在代码区,用指针存储函数在代码区的首地址,通过指针偏移对函数进行访问,函数名就是函数的指针名,也是函数的首地址名;
2、函数的指针可以用作参数,那么函数也可以用作参数。传入函数指针的参数类型和它的返回类型一致;
三、指针函数
返回类型为指针的函数;
四、void *
1、指向任何类型的指针,malloc分配对内存时,由于无法确定内存的存储类型,所以可以使用void *代表任意类型的指针。
2、不能直接对void *指针进行*运算,在进行*运算之前要先进行强制类型转换(type *)p;
3、void *能进行加减操作,但是是以字节为单位进行运算,在运算之前最好先转换成目标类型。
本文介绍了iOS开发中C语言的内存分配函数,包括malloc、calloc、realloc和free的使用,强调了内存管理的注意事项。同时,讲解了函数指针的概念,如何作为参数传递,以及指针函数的定义。最后,探讨了void *的作用,特别是在内存分配时的用途,以及使用void *指针需要注意的类型转换和字节运算问题。
1378

被折叠的 条评论
为什么被折叠?



