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

来源:互联网 发布:乐视手机怎么关闭网络 编辑:程序博客网 时间:2024/06/07 16:48

函数指针传递参数

①指针作为函数的参数

②指针作为函数的返回值

③指向函数的指针

指针作为函数参数

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

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

#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)