【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;
}
}