指针函数
函数返回值为地址的的函数称为指针函数。
例如:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//指针函数
char * fun1(void) //返回.rodata段中的地址,只读不能修改地址空间中的数据
{
//return "hello world";
char *p = "hello wrold";
return p;
}
char * fun2(void) //返回.stack段中的地址,函数结束时,空间自动释放,所以不能返回.statck中的地址
{
char p[] = "hell world";
return p;
}
char * fun3(void) //返回.heap段中的地址,返回后空间数据是可读可写的
{
char *p = (char*)malloc(100);
if(p == NULL){
perror("malloc");
exit(1);
}
strcpy(p,"hello world");
return p;
}
char * fun4(void) //返回.data段中的地址,程序不结束p的空间不释放,所以可以返回,且空间数据可读可写
{
static char p[] = "hell world";
return p;
}
void fun(void)
{
printf("hello world\n");
}
typedef void(*FUNTYPE)(void);
//void (*fun5(void))(void)
FUNTYPE fun5(void) //返回.text段中的地址,代码段为只读,不能赋值,返回的函数地址可以调用函数
{
return fun;
}
int main(void)
{
#if 0
char *str;
str = fun4();
printf("str = %s\n",str);
*str = 'H';
printf("str = %s\n",str);
#else
void (*p)(void);
p = fun5();
p();
#endif
return 0;
}