C语言之指针详解(4)

目录
本章重点
1. 字符指针
2. 数组指针
3. 指针数组
4. 数组传参和指针传参
5. 函数指针
6. 函数指针数组
7. 指向函数指针数组的指针
8. 回调函数
9. 指针和数组面试题的解析
函数指针
数组指针—指向数组的指针
函数指针—指向函数的指针
函数指针
我们来看代码
#include<stdio.h>
int Add(int x, int y)
{

}
int main()
{
	int a = 10;
	int b = 20;
	int arr[10] = { 0 };
	printf("%p\n", &Add);
	printf("%p\n", Add);
	return 0;
}

这里大家记住,函数不存在什么首元素和首元素的地址,&函数名和函数名都是函数的

接着看下面代码

#include<stdio.h>
int Add(int x, int y)
{
	int z = 0;
	z = x + y;
	return z;
}
int main()
{
	int a = 10;
	int b = 20;
	int arr[10] = { 0 };
	int(*pa)(int, int) = Add;
	printf("%d\n", (*pa)(2, 3));
	/*printf("%p\n", &Add);
	printf("%p\n", Add);*/
	return 0;
}

结果是5,这里给大家解释一下上述代码的意思,首先我们加一个()说明pa是一个指针,把函数的地址当放到pa里面,然后再说明我们要传的值是(2,3),希望大家能够理解

我们接着来看代码 

#include<stdio.h>
void Print(char* str)
{
	printf("%s\n", str);
}
int main()
{
	void(*p)(char*) = Print;
	(*p)("hello bit");
	return 0;
}

这就是我们函数指针的概念

输出的是两个地址,这两个地址是 test 函数的地址。 那我们的函数的地址要想保存起来,怎么保存? 下面我们看代码:
void test()
{
	printf("hehe\n");
}
//下面pfun1和pfun2哪个有能力存放test函数的地址?
void (*pfun1)();
void* pfun2();
首先,能给存储地址,就要求pfun1或者pfun2是指针,那哪个是指针? 答案是:
pfun1可以存放。pfun1先和*结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回 值类型为void
pfun2首先和()结合,他不是一个指针,只是一个函数名而已
本章终!
下个章节我们会讲两道这篇与这篇博客有关的例题,然后就会接着讲函数指针数组

猜你喜欢

转载自blog.csdn.net/fjj2397194209/article/details/131221150