首页技术函数指针的用法(if函数的多层嵌套)

函数指针的用法(if函数的多层嵌套)

编程之家2026-07-031083次浏览

大家好,今天来为大家解答函数指针的用法这个问题的一些问题点,包括if函数的多层嵌套也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

函数指针的用法(if函数的多层嵌套)

指针函数和指向函数的指针在意义和用法上有什么区别

函数指针和指针函数的区别:

一、【函数指针】

在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。

1、函数指针定义

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

“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。

函数指针的用法(if函数的多层嵌套)

例如:

int(*f)(int x);

double(*ptr)(double x);在定义函数指针时请注意:

函数指针和它指向的函数的参数个数和类型都应该是—致的;函数指针的类型和函数的返回值类型也必须是一致的。

2、函数指针的赋值

函数名和数组名一样代表了函数代码的首地址,因此在赋值时,直接将函数指针指向函数名就行了。例如,

函数指针的用法(if函数的多层嵌套)

int func(int x);/*声明一个函数*/

int(*f)(int x);/*声明一个函数指针*/

f=func;/*将func函数的首地址赋给指针f*/

赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

3、通过函数指针调用函数

函数指针是通过函数名及有关参数进行调用的。

与其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于它所指的变量i;如果pf是指向某浮点型变量f的指针,则*pf就等价于它所指的变量f。同样地,*f是指向函数func(x)的指针,则*f就代表它所指向的函数func。所以在执行了f=func;之后,(*f)和func代表同一函数。

由于函数指针指向存储区中的某个函数,因此可以通过函数指针调用相应的函数。现在我们就讨论如何用函数指针调用函数,它应执行下面三步:首先,要说明函数指针变量。

例如:int(*f)(int x);

其次,要对函数指针变量赋值。

例如: f=func;(func(x)必须先要有定义)

最后,要用(*指针变量)(参数表);调用函数。

例如:(*f)(x);(x必须先赋值)

【例】任意输入n个数,找出其中最大数,并且输出最大数值。

main()

{

int f();

int i,a,b;

int(*p)();/*定义函数指针*/

scanf("%d",&a);

p=f;/*给函数指针p赋值,使它指向函数f*/

for(i=1;i<9;i++)

{

scanf("%d",&b);

a=(*p)(a,b);/*通过指针p调用函数f*/

}

printf("The Max Number is:%d",a)

}

f(int x,int y)

{

int z;

z=(x>y)?x:y;

return(z);

}

运行结果为:

343-45 4389 4235 1-534 988 555 789↙ The Max Number is:4389

二、【指针函数】

一个函数不仅可以带回一个整型数据的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。

返回指针的函数,一般定义格式为:

类型标识符*函数名(参数表)

int*f(x,y);

其中x,y是形式参数,f是函数名,调用后返回一个指向整型数据的地址指针。f(x,y)是函数,其值是指针。

如:char*ch();表示的就是一个返回字符型指针的函数,请看下面的例题:

【例】将字符串1(str1)复制到字符串2(str2),并输出字符串2.

#include"stdio.h"

main()

{

char*ch(char*,char*);

char str1[]="I am glad to meet you!";

char str2[]="Welcom to study C!";

printf("%s",ch(str1,str2));

}

char*ch(char*str1,char*str2)

{

int i;

char*p;

p=str2

if(*str2==NULL) exit(-1);

do

{

*str2=*str1;

str1++;

str2++;

}

while(*str1!=NULL);

return(p);

}

通过分析可得:

函数指针是一个指向函数的指针,而指针函数只是说明他是一个返回值为指针的函数,函数指针可以用来指向一个函数。

c++的函数指针是怎么用的呀

函数指针,即指向函数的指针。

1.定义

每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。

2.语法

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

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

3.说明

1)函数指针的定义形式中的数据类型是指函数的返回值的类型。

2)区分下面两个语句:

int(*p)(int a, int b);//p是一个指向函数的指针变量,所指函数的返回值类型为整型

int*p(int a, int b);//p是函数名,此函数的返回值类型为整型指针

3)指向函数的指针变量不是固定指向哪一个函数的,而只是表示定义了一个这样类型的变量,它是专门用来存放函数的入口地址的;在程序中把哪一个函数的地址赋给它,它就指向哪一个函数。

4)在给函数指针变量赋值时,只需给出函数名,而不必给出参数。

如函数max的原型为:int max(int x, int y);指针p的定义为:int(*p)(int a, int b);则p= max;的作用是将函数max的入口地址赋给指针变量p。这时,p就是指向函数max的指针变量,也就是p和max都指向函数的开头。

5)在一个程序中,指针变量p可以先后指向不同的函数,但一个函数不能赋给一个不一致的函数指针(即不能让一个函数指针指向与其类型不一致的函数)。

如有如下的函数:int fn1(int x, int y);int fn2(int x);

定义如下的函数指针:int(*p1)(int a, int b);int(*p2)(int a);

p1= fn1;//正确

p2= fn2;//正确

p1= fn2;//产生编译错误

6)定义了一个函数指针并让它指向了一个函数后,对函数的调用可以通过函数名调用,也可以通过函数指针调用(即用指向函数的指针变量调用)。

如语句:c=(*p)(a, b);//表示调用由p指向的函数(max),实参为a,b,函数调用结束后得到的函数值赋给c。

7)函数指针只能指向函数的入口处,而不可能指向函数中间的某一条指令。不能用*(p+1)来表示函数的下一条指令。

8)函数指针变量常用的用途之一是把指针作为参数传递到其他函数

实例:

#include<iostream>

usingnamespacestd;

#include<conio.h>

intmax(intx,inty);//求最大数

intmin(intx,inty);//求最小数

intadd(intx,inty);//求和

voidprocess(inti,intj,int(*p)(inta,intb));//应用函数指针

intmain()

{

intx,y;

cin>>x>>y;

cout<<"Maxis:";

process(x,y,max);

cout<<"Minis:";

process(x,y,min);

cout<<"Addis:";

process(x,y,add);

getch();

return0;

}

intmax(intx,inty)

{

returnx>y?x:y;

}

intmin(intx,inty)

{

returnx>y?y:x;

}

intadd(intx,inty)

{

returnx+y;

}

voidprocess(inti,intj,int(*p)(inta,intb))

{

cout<<p(i,j)<<endl;

}

C++中指针的用法有那些怎么定义怎么初始化

指针

摘自谭浩强C语言程序设计

指针是C语言中广泛使用的一种数据类型。运用指针编

程是C语言最主要的风格之一。

利用指针变量可以表示各种数据结构;能很方便地使用数组

和字符串;并能象汇编语言一样

处理内存地址,从而编出精练而高效的程序。指针极大地丰

富了C语言的功能。学习指针是

学习C语言中最重要的一环,能否正确理解和使用指针是我

们是否掌握C语言的一个标志。

同时,指针也是C语言中最为困难的一部分,在学习中除了

要正确理解基本概念,还必须要

多编程,上机调试。只要作到这些,指针也是不难掌握的。

10.1地址指针的基本概念

在计算机中,所有的数据都是存放在存储器中的。一般把存

储器中的一个字节称为一个

内存单元,不同的数据类型所占用的内存单元数不等,如整

型量占 2个单元,字符量占 1

个单元等,在前面已有详细的介绍。为了正确地访问这些内

存单元,必须为每个内存单元编

上号。根据一个内存单元的编号即可准确地找到该内存单元。

内存单元的编号也叫做地址。

既然根据内存单元的编号或地址就可以找到所需的内存单

元,所以通常也把这个地址称为指

针。内存单元的指针和内存单元的内容是两个不同的概念。

可以用一个通俗的例子来说明

它们之间的关系。我们到银行去存取款时,银行工作人员

将根据我们的帐号去找我们的存

款单,找到之后在存单上写入存款、取款的金额。在这里,

帐号就是存单的指针,存款数

是存单的内容。对于一个内存单元来说,单元的地址即为指

针,其中存放的数据才是该单元

的内容。在C语言中,允许用一个变量来存放指针,这种变

量称为指针变量。因此,一个指

针变量的值就是某个内存单元的地址或称为某内存单元的

指针。

图中,设有字符变量 C,其内容为“K”(ASCII码为十进制

数 75),C占用了011A号单元

(地址用十六进数表示)。设有指针变量 P,内容为 011A,这

种情况我们称为 P指向变量 C,

或说 P是指向变量 C的指针。

严格地说,一个指针是一个地址,是一个常量。而一个指针

变量却可以被赋予不同的指

针值,是变量。但常把指针变量简称为指针。为了避免混淆,

我们中约定:“指针”是指地

址,是常量,“指针变量”是指取值为地址的变量。定义指

针的目的是为了通过指针去访问

内存单元。

既然指针变量的值是一个地址,那么这个地址不仅可以

是变量的地址,也可以是其它数

据结构的地址。在一个指针变量中存放一个数组或一个函数

的首地址有何意义呢?因为数

组或函数都是连续存放的。通过访问指针变量取得了数组或

函数的首地址,也就找到了该数

组或函数。这样一来,凡是出现数组,函数的地方都可以用

一个指针变量来表示,只要该指

针变量中赋予数组或函数的首地址即可。这样做,将会使程

序的概念十分清楚,程序本身也

谭浩强 C语言程序设计 2001年5月1日

精练,高效。在C语言中,一种数据类型或数据结构往往都

占有一组连续的内存单元。用

“地址”这个概念并不能很好地描述一种数据类型或数据结

构,而“指针”虽然实际上也是一

个地址,但它却是一个数据结构的首地址,它是“指向”一

个数据结构的,因而概念更为清

楚,表示更为明确。这也是引入“指针”概念的一个重要

原因。

10.2变量的指针和指向变量的指针变量

变量的指针就是变量的地址。存放变量地址的变量是指针变

量。即在C语言中,允许用

一个变量来存放指针,这种变量称为指针变量。因此,一个

指针变量的值就是某个变量的地

址或称为某变量的指针。

为了表示指针变量和它所指向的变量之间的关系,在程序中

用“*”符号表示“指向”,

例如,i_pointer代表指针变量,而*i_pointer是i_pointer所指

向的变量。

因此,下面两个语句作用相同:

i=3;

*i_pointer=3;

第二个语句的含义是将 3赋给指针变量 i_pointer所指向

的变量。

10.2.1定义一个指针变量

对指针变量的定义包括三个内容:

(1)指针类型说明,即定义变量为一个指针变量;

(2)指针变量名;

(3)变量值(指针)所指向的变量的数据类型。

其一般形式为:

类型说明符*变量名;

其中,*表示这是一个指针变量,变量名即为定义的指针变

量名,类型说明符表示本指

针变量所指向的变量的数据类型。

例如: int*p1;

表示 p1是一个指针变量,它的值是某个整型变量的地址。

或者说 p1指向一个整型变量。

至于 p1究竟指向哪一个整型变量,应由向 p1赋予的地址

来决定。

再如:

int*p2;/*p2是指向整型变量的指针变量*/

float*p3;/*p3是指向浮点变量的指针变量*/

char*p4;/*p4是指向字符变量的指针变量*/

应该注意的是,一个指针变量只能指向同类型的变量,如 P3

只能指向浮点变量,不能

谭浩强 C语言程序设计 2001年5月1日

时而指向一个浮点变量,时而又指向一个字符变量。

10.2.2指针变量的引用

指针变量同普通变量一样,使用之前不仅要定义说明,而且

必须赋予具体的值。未经赋

值的指针变量不能使用,否则将造成系统混乱,甚至死机。

指针变量的赋值只能赋予地址,

决不能赋予任何其它数据,否则将引起错误。在C语言中,

变量的地址是由编译系统分配的,

对用户完全透明,用户不知道变量的具体地址。

两个有关的运算符:

1)&:取地址运算符。

2)*:指针运算符(或称“间接访问”运算符)。

C语言中提供了地址运算符&来表示变量的地址。

其一般形式为:

&变量名;

如&a表示变量 a的地址,&b表示变量 b的地址。变量本

身必须预先说明。

设有指向整型变量的指针变量p,如要把整型变量a的地址赋

予p可以有以下两种方式:

(1)指针变量初始化的方法

int a;

int*p=&a;

(2)赋值语句的方法

int a;

int*p;

p=&a;

不允许把一个数赋予指针变量,故下面的赋值是错误的:

int*p;

p=1000;

被赋值的指针变量前不能再加“*”说明符,如写为*p=&a也

是错误的。

假设:

int i=200, x;

int*ip;

我们定义了两个整型变量 i,x,还定义了一个指向整型数的指

针变量 ip。i,x中可存放

整数,而 ip中只能存放整型变量的地址。我们可以把 i的地

址赋给 ip:

ip=&i;

此时指针变量 ip指向整型变量 i,假设变量 i的地址为

1800,这个赋值可形象理解为下

图所示的联系。

以后我们便可以通过指针变量 ip间接访问变量 i,例如:

x=*ip;

运算符*访问以ip为地址的存贮区域,而ip中存放的是变量i的

地址,因此,*ip访问的

谭浩强 C语言程序设计 2001年5月1日

是地址为1800的存贮区域(因为是整数,实际上是从1800开始

的两个字节),它就是i所占用

的存贮区域,所以上面的赋值表达式等价于

x=i;

另外,指针变量和一般变量一样,存放在它们之中的值是可以

改变的,也就是说可以改变

它们的指向,假设

int i,j,*p1,*p2;

i='a';

j='b';

p1=&i;

p2=&j;

则建立如下图所示的联系:

这时赋值表达式:

p2=p1

就使 p2与 p1指向同一对象 i,此时*p2就等价于i,而不是

j,图所示:

如果执行如下表达式:

*p2=*p1;

则表示把 p1指向的内容赋给 p2所指的区域,此时就变成

图所示

谭浩强 C语言程序设计 2001年5月1日

通过指针访问它所指向的一个变量是以间接访问的形式进

行的,所以比直接访问一个变

量要费时间,而且不直观,因为通过指针要访问哪一个变量,取

决于指针的值(即指向),例如

"*p2=*p1;"实际上就是"j=i;",前者不仅速度慢而且目的不明。

但由于指针是变量,我们可以

通过改变它们的指向,以间接访问不同的变量,这给程序员带

来灵活性,也使程序代码编写得

更为简洁和有效。

好了,关于函数指针的用法和if函数的多层嵌套的问题到这里结束啦,希望可以解决您的问题哈!

css是什么语言(css是什么的简称)delete语句的作用 delete语句与truncate语句的区别