1.经常容易混淆的指针
第一组:
1.int *a【10】;
这是一个指针数组,数组a中有10个整型指针变量
a【0】~a【9】
常用于保护多个字符串
2.int(*a)【10】
注意:*与a先结合,说明是指针变量,后面有中括号,说明他是一个指向数组的指针;
常用于定义一个行指针,用于保存二维数组的地址,二维数组的形参可以定义为数组指针变量
3.int **p;
这是一个指针的指针,保存指针变量的地址,也称二级指针,搭配指针数组使用
第二组:
1.只读指针变量
2.只读变量指针
第三组:
1.int *f(void);
注意:f没有用括号括起来,说明f是一个函数,*修饰返回值类型,因此是指针函数
它是一个函数声明,声明这个函数的返回值为int*类型的
2.int (*f)(void);
注意:*f用括号括起来了,*修饰f说明,f是一个指针变量,因此是函数指针
f是个函数指针变量,存放函数的地址,他的指向的函数必须有一个int类型返回值,没有参数
2.动态内存申请
1.动态内存分配的概念
1.静态分配:
在编译或运行时,按照事先规定的大小分配空间,如int a【10】,系统自动分配
必须事先指定所需空间大小
分配在栈区或全局变量,一般以数组形式
按计划分配
2.动态分配
在程序运行中,根据需要的大小自由分配空间,需要程序员自己分配
分配在堆区,一般使用特定的函数进行分配
按需分配
3.动态分配函数
1.malloc函数:开辟一片连续的内存空间,需要手动初始化
语法:指针变量接受=malloc(需要开辟空间大小字节数)
指针变量接受=malloc(元素类型字节数*元素个数)
注意变量的类型需要开辟所需的数据类型保持一致
2.free函数
free(指针变量)
3.colloc函数
开辟一片连续的内存空间,自动初始化为0
语法:指针变量=calloc(元素个数,元素类型所占字节数)
4.recalloc函数:重新分配内存空间大小,主要进行拓展内存空间
语法:指针变量接受=recalloc
4.内存泄漏
概念:申请的内存,首地址丢失,找不到了,再也没有办法使用,也没有办法释放,这块内存就泄露了