一、 指针函数
- 返回值是指针的函数
- 注意:绝对不能返回局部变量的地址,因为使用后空间会销毁
- 但在局部变量前可加static或定义全局变量或返回传入的某指针
1.1 动态内存分配
1.1.1 malloc函数
void *malloc(size_t size);
void free(*ptr);
- malloc保证申请的这段空间一定是连续的
- 使用时,加头文件#include<stdlib.h>
- 通过free函数销毁
- 使用前,判断malloc是否申请到空间,若未其返回为空指针
- 接收首地址的指针,若要变化,将指针备份
- free释放后,将指针置为空,避免野指针出现
1.1.2 realloc函数
void *realloc(void *ptr, size_t size);
- 重新开一段空间,将原来内容拷贝,并释放原来的内容;
- 用于扩容或缩容
- 主程序结束时,垃圾回收器会回收未释放的指针,但仅适用于有操作系统,不适用于裸机程序
1.1.3 calloc函数
void *calloc (size_t nmemb,size_t size)
//int *p = malloc(10 * sizeof(int));
int *p = calloc(10, sizeof(int));
1.1.4 reallocarray函数
void *reallocarray(void *base, size_t nmemb, size_t size)
二、 函数指针
2.1 语法
首先,写函数声明,去掉函数名,在去掉的位置加(*p)
如: int (*p)(int ,int) // 此时p指向一类两个整形作为参数且返回值为int型的指针
函数的函数名为该函数的入口地址
2.2 作用
降低程序的耦合性
采用回调函数,如下图
qsort函数也使用了回调函数,其一般形式为:
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
使用如下:
三、 指针数组
int *a[10];//定义了十个指针,放于一个数组
作用:
int main(int argc, char *argv[])
{
return 0;
}
四、 指针指针
- 称为二级指针
- 函数实参是一个指针数组,形参是指针的指针
口诀:二维数组作为函数参数,形参为指向数组的指针
指针数组作为函数参数,形参为指向指针的指针
例题:
1.指针数组打印
2.指针数组逆序
3.指针数组排序
4.指针数组查找