level 3
XYD菲菲
楼主
先积累硬实力,再积累软实力,最后积累巧实力,而C语言是嵌入式技术的硬实力之一。
学技术,重在日拱一卒、一点一滴的积累。
今天分析C语言的指针函数和函数指针。
指针函数
1.1、什么是指针函数
指针函数是指带指针的函数。
它本质是一个函数,它的返回值是这个类型的指针。
2.1、指针函数的定义
类型说明符 *函数名(参数列表)
例:
int *fa; //fa是指针变量
int *fun(x,y); //fun是指针函数;
说明:
1、首先fun是一个函数,返回值是地址;
2、函数的返回值的类型必须和函数定义的类型保持一致(是int*类型的指针,即函数fun的返回值类型必须是int类型的地址);
3、必须是同类型的指针来接收。
比如:
int *fun();
int *p;
p=fun();//正确
注意:接收返回值的类型一定要和函数返回值的类型相同。
我们通过代码来分析一下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *day_name();
main()
{
char *p; //同类型指针
p=day_name();//返回的是地址
printf("接收到的字符串%s\n",p);
}
/*指针函数没有()*/
char *day_name() //指针函数
{
return("Monday"); //返回地址
}
函数指针
2.1、什么是函数指针
函数指针是指向函数的指针变量,本质是一个指针变量。
2.2、函数指针的定义
类型说明符 (*函数名)(参数)
例:
int (*fp)(int x) /*定义一个指针变量*/
fp=fun;//将fun()函数首地址传给指针变量fp
说明:指向函数的指针包含了函数的首地址
例:
#include<stdio.h>
int max(int x,int y)//比较大小函数
{
return (x>y? x:y);
}
int main()
{
int(*ptr)(int, int);/*声明一个指针变量*/
int a, b, c;
ptr = max;//把函数首地址传给函数指针
printf("请输入2个数比较大小:");
scanf("%d%d", &a, &b);
c = (*ptr)(a,b);//接收返回值
printf("a=%d, b=%d, max=%d", a, b, c);
return 0;
}
指针函数和函数指针的区别
最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。
指针函数本质是一个函数,其返回值为指针。
函数指针本质是一个指针,其指向一个函数。
2022年05月03日 01点05分
1
学技术,重在日拱一卒、一点一滴的积累。
今天分析C语言的指针函数和函数指针。
指针函数
1.1、什么是指针函数
指针函数是指带指针的函数。
它本质是一个函数,它的返回值是这个类型的指针。
2.1、指针函数的定义
类型说明符 *函数名(参数列表)
例:
int *fa; //fa是指针变量
int *fun(x,y); //fun是指针函数;
说明:
1、首先fun是一个函数,返回值是地址;
2、函数的返回值的类型必须和函数定义的类型保持一致(是int*类型的指针,即函数fun的返回值类型必须是int类型的地址);
3、必须是同类型的指针来接收。
比如:
int *fun();
int *p;
p=fun();//正确
注意:接收返回值的类型一定要和函数返回值的类型相同。
我们通过代码来分析一下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *day_name();
main()
{
char *p; //同类型指针
p=day_name();//返回的是地址
printf("接收到的字符串%s\n",p);
}
/*指针函数没有()*/
char *day_name() //指针函数
{
return("Monday"); //返回地址
}
函数指针
2.1、什么是函数指针
函数指针是指向函数的指针变量,本质是一个指针变量。
2.2、函数指针的定义
类型说明符 (*函数名)(参数)
例:
int (*fp)(int x) /*定义一个指针变量*/
fp=fun;//将fun()函数首地址传给指针变量fp
说明:指向函数的指针包含了函数的首地址
例:
#include<stdio.h>
int max(int x,int y)//比较大小函数
{
return (x>y? x:y);
}
int main()
{
int(*ptr)(int, int);/*声明一个指针变量*/
int a, b, c;
ptr = max;//把函数首地址传给函数指针
printf("请输入2个数比较大小:");
scanf("%d%d", &a, &b);
c = (*ptr)(a,b);//接收返回值
printf("a=%d, b=%d, max=%d", a, b, c);
return 0;
}
指针函数和函数指针的区别
最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。
指针函数本质是一个函数,其返回值为指针。
函数指针本质是一个指针,其指向一个函数。