函数指针,指针函数与动态内存分配

函数指针:
返回值类型 函数名(参数列表)
{
return xx;
}
函数实现的时候要求:高内聚,低耦合。

指针函数:返回值类型是指针类型的函数
char * func(int a,int b)
{
	return 地址;
}	
函数指针:它是一个指针,它指向一个函数
返回值类型 (*函数名)(参数列表);

函数指针数组:它是一个数组,数组中的成员是函数指针。
	返回值类型 (*函数名[n])(参数列表);

常见变量定义举例

用变量a给出下面的定义   
a) 一个整型数(An integer) 
	int a;
b) 一个指向整型数的指针
(A pointer to an integer) 
	int *a;
c) 一个指向指针的的指针,它指向        
的指针是指向一个整型数                        
(A pointer to a pointer to an integer) 
	int **a;			二级指针
d) 一个有10个整型数的数组					 
(An array of 10 integers)
	int a[10];							 数组
e) 一个有10个指针的数组,该指针						
是指向一个整型数的(An array of 10 pointers			
to integers)
	int  * a [10];						指针数组
f) 一个指向有10个整型数数组的					
指针(A pointer to an array of 10 integers)
	int (*a)[10];						    数组指针
g)定义一个名为a的指针函数(返回值int*,参数:int)		
	int * a (int t);						指针函数
h)定义一个名为a的函数指针 (返回值int,参数:int)			
	int (*a)(int t);						函数指针

动态内存分配

(1)动态内存分配函数
man malloc
#include <stdlib.h> 头文件
void *malloc(size_t size);
功能:在堆上分配内存
参数:
size:想要分配的内存的大小
返回值:成功:返回分配好的内存的首地址
工程师想要分配的内存的类型int * char ;
但是这里的返回值是void
,可以使用强制类型
转换来回去自己想要的类型即可。
失败:返回NULL
最好定义一个变量来接收mollc的返回值
(2)动态内存释放函数
man free
void free(void *ptr);
功能:释放动态分配的内存
参数:
@ptr:内存的首地址
返回值:无
free释放完内存后最好再把指针变量赋空值 *p=NULL;
什么是野指针?
当指针的内存被释放掉之后,用户继续操作这个指针,此时这个指针就是野指针。

如何规避野指针?
在释放完指针指向的内存后,将指针赋值为NULL;

什么是内存泄漏?
用户动态分配的内存,没有或者不能释放,导致内存泄漏。
内存泄漏可能导致系统宕机。

猜你喜欢

转载自blog.csdn.net/bentao1997719/article/details/124922155