[size=large][color=blue]指针函数[/color][/size]
[size=medium]
1. 概念:指返回指针值的函数。[/size]
[size=medium]2. 其他函数调用指针函数获取指针后,要在适当的时候,调用 free() 函数释放内存。
3. 指针函数 不能返回 auto 类型局部变量的地址,但可以返回 static 类型变量的地址
1)auto 型局部变量的生存期很短,返回的指针所对应的内存单元将被释放掉,返回指针也就无效,称为野指针。
2)static 类型局部变量的生存期等同于全局变量的生存期,因此函数返回时,返回的指针所对应的内存单元不会被释放,返回指针是有效的。
3)[color=red]原则:返回的指针所对应的内存空间不能因该指针函数的返回而被释放掉。[/color]
4. 指针函数常见返回值情况
1)函数中动态分配的内存的首地址。
2)函数中的静态(static)变量或全部变量所对应的存储单元的首地址。
3)通过指针参数所获得的实参的有效地址。
[/size]
[size=large][color=blue]函数指针[/color][/size]
[size=medium]
1. 概念:函数名即是该函数的指针,代表该函数的入口地址。函数指针就是指向一个函数的指针变量。可以通过函数指针调用此函数。
2. 定义和赋值:
[color=blue]函数类型 ( *指针变量 ) ( [ 形参类型1, 形参类型2 ... ] )[/size][/color]
[size=medium]
1. 概念:指返回指针值的函数。[/size]
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);
}
[size=medium]2. 其他函数调用指针函数获取指针后,要在适当的时候,调用 free() 函数释放内存。
3. 指针函数 不能返回 auto 类型局部变量的地址,但可以返回 static 类型变量的地址
1)auto 型局部变量的生存期很短,返回的指针所对应的内存单元将被释放掉,返回指针也就无效,称为野指针。
2)static 类型局部变量的生存期等同于全局变量的生存期,因此函数返回时,返回的指针所对应的内存单元不会被释放,返回指针是有效的。
3)[color=red]原则:返回的指针所对应的内存空间不能因该指针函数的返回而被释放掉。[/color]
4. 指针函数常见返回值情况
1)函数中动态分配的内存的首地址。
2)函数中的静态(static)变量或全部变量所对应的存储单元的首地址。
3)通过指针参数所获得的实参的有效地址。
[/size]
[size=large][color=blue]函数指针[/color][/size]
[size=medium]
1. 概念:函数名即是该函数的指针,代表该函数的入口地址。函数指针就是指向一个函数的指针变量。可以通过函数指针调用此函数。
2. 定义和赋值:
[color=blue]函数类型 ( *指针变量 ) ( [ 形参类型1, 形参类型2 ... ] )[/size][/color]
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);