************函数指针***************
typedef int (*pfun_t)(int ,int ,int*);
int add(int x,int y,int* ret); //函数声明
int main(int argc, const char * argv[]) {
//函数指针声明
int (*p)(int ,int ,int*) = NULL; //函数指针
p = add; //函数指针赋值
p(3,4,&result); //函数指针只能引用,不能做指针运算和篡改
printf("%d\n",result);
return 0;
}
{
//先变量声明
int sum = 0;
//合法性检查 --para illegal check
//需求分析 --demand
sum = x + y;
//处理返回值
return sum;
}
//回调函数
int operate(int x,int y,pfun_t pfun)
{
int ret = 0;
//函数参数合法性检查
if (x == 0) {
return -1;
}
if (y == 0) {
return -1;
}
if (pfun == NULL) {
return -1;
}
//
pfun(x,y,&ret);
//函数返回值
return ret;
}
************指针函数***************
代码:
char* analysis(char* s,char ch,int* ndx);
int main(int argc, const char * argv[]) {
int index = 0;
//找到某个特定字符出现的位置
char string_buffer[] = "hello world";
char* ret = NULL;
//需求分析 :自顶向下分析法,逐步求精
ret = analysis(string_buffer,'o',&index);
printf("文本分析的结果为:从第%d个字符开始截取的文字段的内容:%s\n",index+1,ret);
return 0;
}
//返回的数据类型是指针
char* analysis(char* s,char ch,int* ndx)
{ int i = 0;
//求取字符在字符串中的特定位置,并返回
for (i=0; s[i]!='\0'; i++) {
if (s[i] == ch) {
break;
}
}
*ndx = i;
return s+i;
}
函数完成后分析:
1.参数非法? //入参检查
2.逻辑是否缺失? //
//指针前面的指向类型决定了该指针的类型
int* p; //一维指针
int** pp; //二维指针
void* ppp; //泛型指针(数据指针),不能++
int (*pppp)(int,int,char*); //函数指针,也不能++
//函数名,数组名不能被赋值,不能被计算(++),但能被拷贝
//字符串常量是指针,也不能被赋值,但能被拷贝
char* p10 = NULL;
p10 = "hello world";
printf("%s\n",p10+3);
printf("%s","hello world"+2); //“hello world”是常量指针
char* p10 = "hello world"; //有空间的常量指针
*p10 = ‘H’; //error: p10现在指向常量区,不能重新赋值
char* p11 = {'h','e','l','l'}; //error:没有空间只有数据内容
char p12[] = {'h','e','l','l'}; //数组自动申请空间