数据结构学习-指针与函数

函数指针传递参数

①指针作为函数的参数

②指针作为函数的返回值

③指向函数的指针

指针作为函数参数

函数的参数不仅可以是整型,实型,字符型等数据,还可以是指针类型,因此可以像其他变量一样在函数间传递指针变量,

使用时注意,指针存储的是一个变量的地址,而不是变量的值。

#include<stdio.h>
void swap(int *p,int *q)    //传递的是地址,相应的定义指针变量作形参
{
    int temp;
    temp = *p;
    *p = *q;
    *q = temp;
}
int main()
{
    int x1,x2;
    scanf("%d%d",&x1,&x2);
    swap(&x1,&x2);  //注意实参是变量x1,x2的地址
    printf("%d %d",x1,x2);
    return 0;
}

函数返回指针

函数返回值的类型不仅可以是简单的数据类型,指针作为一种变量,同样允许作为函数的返回值

返回指针的函数定义的一般形式为

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

{

函数体语句

}

其中,函数名之前加了 * 号表明这是一个指针型函数,即返回值是一个指针。类型标识符表示了返回的指针值所指向的数据类型

#include<stdio.h>
int* max(int *a,int *b)
{
    return *a>*b?a:b;
}
int main()
{
    int x,y,*p=NULL;
    scanf("%d%d",&x,&y);
    p=max(&x,&y);
    printf("%d",*p);
    return 0;
}

指向函数的指针

一个函数所包含的指令在内存中总是占用一段连续的存储空间,把这段存储空间的首地址称为函数的入口地址,通过函数名可以得到这一地址,也可以把函数的这个首地址赋予一个指针变量,使该指针变量指向该函数,然后通过指针变量就可以找到并调用这个函数。有时也把这种指向函数的指针变量称为 “函数指针变量”

定义指向函数的指针变量

类型标识符(*指针变量名)(形参列表)

类型标识符表示被指函数的返回值的类型,(*指针变量名)表示*后面的变量是定义的指针变量。

例如:int (*pf)()

表示 pf 是一个指向函数的指针变量,该函数为无参函数,且函数的返回值是整型

利用函数指针调用函数的一般形式为:

(*指针变量名)(实参表)


#include<stdio.h>
int max(int a,int b)
{
    return a>b?a:b;
}
int min(int a,int b)
{
    return a<b?a:b;
}
int  main()
{
    int (*p)(int,int);  //p为指向函数的指针变量
    int x,y,z;
    scanf("%d%d",&x,&y);
    p=max; //通过赋值让p指向max函数
    z=(*p)(x,y);
    printf("\nmax=%d",z);
    p=min; //通过赋值让p指向min函数
    z=(*p)(x,y);
    printf("\nmin=%d",z);
    return 0;
}


通过指向函数的指针变量调用函数的步骤

①定义指向函数的指针变量,如int(*p)(int,int)

②把被调用函数的入口地址(即函数名)赋给指针变量,如p=max和p=min

③用指向函数的指针变量调用该函数,如z=(*p)(x,y)


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值