【C语言学习笔记】指针函数与函数指针

C语言中的函数和指针的概念是非常重要的概念,然后又让人觉得非常困难。

本文来简单聊一聊指针函数与函数指针的区别。

其实这两个概念很好区分,顾名思义,类似于指针数组与数组指针,指针数组是一个数组,它的每一个元素都是一个指针,因此名为指针数组。数组指针呢本身是一个指针,只不过这个指针指向的是一个数组。这样理解起来是不是就很好记了。

同样的,指针函数是一个函数,它的返回值是一个指针型变量,我们通常称这种函数为指针函数。
函数指针本身是一个指针,它指向的是一个函数,当它们的类型相同时就可以用指针来指向并使用,好比我们想用一个指针指向一个int型变量,那就必须声明为指向int类型的指针。

#include <string.h>

// 交换两个整型变量的值
void swap(int *a, int *b);

// 返回两个字符串中较长的一个
char *func(char *str1, char *str2);

int main(const int argc, char *argv[])
{
	void (*p)(int *a, int *b); //指向函数的指针
	p = swap; // p是一个指针变量,它所指向的内容是一个函数

	int a = 1;
	int b = 2;
	p(&a, &b);

	char *str1 = "hello";
	char *str2 = "world";
	char * l_str = NULL; // l_str是一个指向字符串的指针
	// longer_str是一个返回较长字符串的函数
	// 因为它的返回值是指针,所以该函数为一个指针(型)函数
	l_str = longer_str(str1, str2);

	return 0;
}

// 交换两个整型变量的值
void swap(int *a, int *b)
{
	if (a==b || *a==*b || a==NULL || b==NULL)
		return ;
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

// 返回两个字符串中较长的一个
char *longer_str(char *str1, char *str2)
{
	// strlen函数功能是求取字符串长度,不包含末尾的'\0'
	if(strlen(str1) >= strlen(str2)) {
		return str1;
	} else {
		return str2;
	}
}
posted @ 2022-03-03 15:44  coffee_tea_or_me  阅读(176)  评论(0编辑  收藏  举报