指针函数和函数指针_c语言学习笔记

指针函数

1. 概念:指返回指针值的函数。
int *getData ( int num )
{
	static int a[100];		// 定义为staitic类型
	int k;

	if ( num > 100 )	return (NULL);
	for ( k=0; k<num; k++ )
		scanf ("%d", &a[k]);
	return (a);
}

2. 其他函数调用指针函数获取指针后,要在适当的时候,调用 free() 函数释放内存。

3. 指针函数 不能返回 auto 类型局部变量的地址,但可以返回 static 类型变量的地址
    1)auto 型局部变量的生存期很短,返回的指针所对应的内存单元将被释放掉,返回指针也就无效,称为野指针。
    2)static 类型局部变量的生存期等同于全局变量的生存期,因此函数返回时,返回的指针所对应的内存单元不会被释放,返回指针是有效的。
    3)原则:返回的指针所对应的内存空间不能因该指针函数的返回而被释放掉。

4. 指针函数常见返回值情况
    1)函数中动态分配的内存的首地址。
    2)函数中的静态(static)变量或全部变量所对应的存储单元的首地址。
    3)通过指针参数所获得的实参的有效地址。


函数指针

1. 概念:函数名即是该函数的指针,代表该函数的入口地址。函数指针就是指向一个函数的指针变量。可以通过函数指针调用此函数。

2. 定义和赋值:
    函数类型  ( *指针变量 ) ( [ 形参类型1, 形参类型2 ... ] )

int max ( int a, int b )
{
	return ( a>b ? a : b );
}

int (*p)(int, int);		// 定义函数指针p
p = max;				// 将函数max()所对应的内存单元首地址(函数名max)赋给函数指针p
// 或 p = &max;

// 调用方式
p (2, 3);		//等价于 max(2, 3);
(*p) (2, 3);

你可能感兴趣的:(学习笔记)