
函数指针
函数代码存储在一片连续的内存单元中(代码区),其首地址就是函数的入口地址,函数名则代表该地址
主函数在调用子函数时,让程序转移到函数的入口地址去执行
程序也可以自定义指针,指向函数的入口地址,即指向函数,以此实现函数调用
定义形式: 类型 (*指针变量名)(参数表);
其中类型即函数返回值类型,参数表即函数形参
和普通指针一样,指向函数的指针也必须先初始化(指向某个函数),然后才能使用
注意,指向函数的返回值和形参必须与指针变量中的定义相一致
C语言规定,函数定义是不能嵌套的,整个函数也不能作为参数在函数间进行传送,如果需要进行传递,就必须使用指向函数的指针
变量作为参数
动态分配空间
单个元素
多个元素
分配空间后,可以用 realloc 调整大小
char *pstr= "Hello, world!";
char str[40];
int i;
for(i=0; *(pstr+i)!='\0'; i++) str[i]=pstr[i];
str[i]= '\0'; //此句不能少
//注意,*(pstr+i)等价于pstr[i],即访问字符串中第i个字符
float (*func)(int x, char y, float z);//注意与 float *func(int x, char y, float z);的区别
double square(double x); //函数声明
double (*p)(double x); //函数型指针声明
p=square; //指针初始化
s=p(1.6); 或 s=(*p)(1.6) //函数调用
#include <stdlib.h>
void *malloc(unsigned int size);
//分配成功返回指向空类型void的指针,失败返回NULL
int *p; p=(int *) malloc(n*sizeof(int));
//常用调用方法(类型转换、大小计算)
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
//为nmemb个元素分配内存空间,其中每个元素的长度都是size个字节
//分配成功返回指向空类型void的指针,并用0初始化空间;失败返回NULL