C语言基础学习6: 指向函数的指针

1、函数指针变量调用函数

 1 #include <stdio.h>
 2 int max(int x, int y);
 3 int max(int x, int y)
 4 {
 5     int z;
 6     if(x<y)
 7         z = y;
 8     else
 9     z = x;
10     return z;
11 }
12 void main()
13 {
14     int a,b,c;
15     scanf("a=%d,b=%d",&a,&b);
16     c = max(a,b);
17     printf("max = %d\n",c);
18 }

用函数指针调用函数:

 1 #include <stdio.h>
 2 int max(int x, int y);
 3 int max(int x, int y)
 4 {
 5     int z;
 6     if(x<y)
 7         z = y;
 8     else
 9     z = x;
10     return z;
11 }
12 void main()
13 {
14     int a,b,c;
15     int (*p)(int x, int y);
16     scanf("a=%d,b=%d",&a,&b);
17     p = max;
18     c = (*p)(a,b);
19     printf("max = %d\n",c);
20 }

指针变量可以指向整型、字符串、数组,也可以指向一个函数。一个函数在编译时被分配一个入口地址,这个函数的入口地址就称为函数的指针。可以用一个指针变量指向这个函数,然后通过该指针变量调用此函数。

指向函数的指针变量的一般定义形式为:

数据类型 (*指针变量名)(函数参数列表)

例如上面的 int (*p)(int x, int y);

这里注意圆括号不能省去,因为()的优先级高于*,声明成了一个p函数,函数的返回值是指向整型变量的指针。

p = max; 作用是将函数max的入口地址赋给指针变量p。

和数组名表示数组首元素地址类似,函数名代表该函数的入口地址。

因此函数的调用可以通过函数名调用,也可以通过函数指针调用(即用指向函数的指针变量调用)。

C语言基础学习6: 指向函数的指针

时间: 2024-10-05 17:20:45

C语言基础学习6: 指向函数的指针的相关文章

C语言基础学习5:字符串与指针

1.字符串的表示形式 (1)用字符数组存放一个字符串,然后输出该字符串. char string[] = "I am happy"; printf("%s",string); (2)用字符指针指向一个字符串. char *string = "I am happy"; printf("%s",string); 2.字符指针作函数参数 (1)用字符数组作参数 void CopyString(char from[], char to

C语言基础学习3:数组与指针

数组元素的指针就是数组元素的地址. 1.指向数组元素的指针 C语言规定数组名(不包括形参数组名,形参数组并不占据实际的内存单元)代表数组中的首元素(即序列为0的元素)的地址. int a[10]; int *p1,*p2; p1 = &a[0]; p2 = a; p1和p2指向同一个数组a[10]. 2.通过指针引用数组元素 按C语言的规定,如果指针变量p已指向数组中的一个元素,则p+1指向同一个数组中的下一个元素,而不是将p的值(地址)简单的加1. 如果p的初值为&a[0],则 (1)

C语言基础学习7:返回指针值的函数

一个函数可以返回一个整型值.字符值.实型值等,也可以返回指针型的数据,即地址,返回的是指针类型. 返回指针值的函数的一般定义形式为; 数据类型 *函数名(参数列表) 例如: int *a(int x, int y); a作为函数名,调用它之后能得到一个指向整型数据的指针(地址). ()优先级高于*,因此a先与()结合,这是函数形式,返回值为指针形式. 1 #include <stdio.h> 2 float *search(float (*pointer)[4]); 3 float *sear

C语言基础学习9:指向指针的指针

一般形式: 基类型 **变量名: 例如:char **p; void main() { char *name[] = {"Follow me","Basic","Great Wall","FORTRAN","Computer design"}; char **p; int i; for(i=0;i<5;i++) { p = name + i; printf("%s\n",*p);

C语言基础学习3:指针

1.地址和指针的概念 一个变量的地址成为该变量的“指针”. 如果有一个变量专门用来存放另一变量的地址(即指针),则它称为“指针变量”,指针变量的值(即指针变量中存放的值)是地址(即指针). 指针是一个地址,而指针变量是存放地址的变量 2.变量的指针和指向变量的指针变量 2.1指针变量的定义 指针变量的定义:基类型 *指针变量名: int a; int *pointer; pointer = &a; 2.2指针变量的引用 指针变量中只能存放地址,不能将一个整数赋给一个指针变量. “&”和“*

C语言基础学习笔记

--C语言框架-- 数据  字节byte          字符   char         8  半字half word     短整型        short int    16    字word            整型   int(integer)   32               长整型   long int     32                 单精度   float        32   双字(double word) 双精度  double       64 

【C语言】-返回指针的函数与指向函数的指针

本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 回到顶部 前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否

C语言基础学习2:字符数组

在C语言的基本数据类型中没有没有字符串变量,一般以字符数组的形式给出. 1.字符串数组的初始化 char c[] = {'I', ' ', 'a', 'm', 'h', 'a', 'p', 'p', 'y'}; char c[] = "I am happy"; 区别:第一种方式字符串长度为10,内存中占10*sizeof(char)个字节,第二种方式是以字符串形式表示,有一个字符串结束字符'\0',内存中占11*sizeof(char)个字节. 2.字符数组的输入输出 %c,一个一个字

C语言基础学习8:指针数组

一个数组,若其元素均为指针类型数据,称为指针数组,指针数组中的每一个元素都相当于一个指针变量. 一维指针数组的定义形式为: 类型名 *数组名[数组长度]: 例如:int *p[4]; []的优先级比*高,因此p先与[4]结合,形成p[4]形式,这是数组形式,然后再与p前面的"*"结合,"*"表示此数组是指针类型的,每个数组元素都可指向一个整型变量. 为什么要用到指针数组呢? 因为它比较适合于用来指向若干个字符串,使得字符串处理更加灵活. 1 #include <