指针函数
本质:指针函数,本质是函数
研究问题角度:
(1) 参数个数及参数的类型
(2) 返回值的类型
(1)什么是指针函数?
返回值为指针的函数
int* get_memory() //指针函数
void* malloc(size_t size); //指针函数
char* strcpy(char *dest, const char *src);//指针函数
(2)找到字符
例:
#include <stdio.h>
#include <stdlib.h>
int is_within(char* s, char ch)//ch是被查找的字符
{
while(*s != '\0')
{
if(*s == ch)
return 1;
s++;//指针向后移动一个位置,指向下一个字符
}
return 0;
/*
// 方法一
int i = 0;
while(s[i] != '\0')
{
if(s[i] == ch)
return 1;
i++;
}
//如果程序能走到return 0,证明while循环遍历字符串都结束了,也没有执行return 1
return 0;
*/
}
int main(int argc, const char *argv[])
{
char a[100] = "hello world!!";
char ch;
printf("ret is %d\n",is_within(a,'z'));
//请你输入一个字符串和要查找的字符
printf("Please input string char:\n");
scanf("%s",a);
getchar();//吸收上一次输入字符串的回车产生的\n
scanf("%c",&ch);
printf("ch is %d\n",ch);
printf("ret is %d\n",is_within(a,ch));
return 0;
}
函数指针:
本质是指针
研究问题的角度:
(1) 指针的类型是什么
(2) 指针指向的类型是什么
当你确定了研究问题的角度,你也就确定了用手去挡住谁
整型指针指向的是整型
数组指针指向的是数组
函数指针指向的是函数
(1)定义函数指针
void showStar();
int getMax(int a, int b);
int* get_memory() //指针函数
void* malloc(size_t size); //指针函数
char* strcpy(char *dest, const char *src);//指针函数
如何定义一个函数指针,指向一个函数
//函数的名字,就是函数在内存当中的首地址
(1)复制这个函数声明,然后将函数的名字替换称为 (*p),就可以定义一个函数指针,指向这个函数
void (*p)(); //类似于int* p;
p = showStar;//类似于 p = &a;
void (*p)() = showStar;
int (*p)(int, int) = getMax;
int* (*p)() = get_memory;
void* (*p)(int) = malloc;
char* (*p)(char *, char *) = strcpy;
//函数指针: 指向的类型是一个 函数类型
(1) 指针的类型是什么
(2) 指针指向的类型是什么
int (*p)(int, int);
//p的类型,用手挡住p int (*)(int,int) printf("%d\n",sizeof(int (*)(int,int))); //4 因为是指针类型,占4个字节
//p指向的类型,用手挡住*p int (int,int)
int getMax(int a, int b)//问你 getMax的类型是什么 int (int,int) 是一个函数类型
char* (*p)(char *, char *) //p是一个指向指针函数的函数指针
//p的类型,用手挡住p char* (*)(char*,char*)
//p指向的类型,用手挡住*p int (int,int)
#作业:思考下面p代表的意义
//先找到本质
// 数组 指针 函数
//数组:用手挡住 数组名和元素个数找元素的类型
//指针:用手挡住p,找p的类型, 用手挡住*p,去找指针指向的类型
//函数: ()内必然是,参数列表,用手挡住函数名和参数列表,剩下的就是返回值的类型
(1)int *p[3]; //元素个数为3的整型指针数组 元素类型int* 元素个数3个
(2)int (*p)[3]; //指向元素个数为3个int的数组指针 p的类型:int (*)[3] p指向的类型int [3]
(3)int *p(int); //参数为1个int,返回值为int*的 指针函数
(4)int (*p)(int);//函数指针 p的类型:int (*)(int) p指向的类型int (int)
//函数指针 指向的是参数为1个int,返回值为int类型的函数
(5)int *(*p)(int);//函数指针 p的类型:int *(*)(int) p指向的类型 int* (int)
//函数指针 指向的是参数为1个int,返回值为int*类型的 指针函数
(6)int (*p[3])(int); //函数指针数组 元素个数 3, 元素类型 int (*)(int)
(7)int *(*p[3])(int); //函数指针数组 元素个数 3, 元素类型 int* (*)(int)
// 7 是函数指针数组,数组中的每个元素都是一个函数指针,函数指针指向的函数类型是指针函数