指针与函数

一、指针作为函数的参数
指针可以作为函数的参数,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<bits/stdc++.h>
using namespace std;
//有错误的两个变量交换
void Swap(int *a,int *b)
{
    int *p;
    p=a;
    a=b;
    b=p;
}
//运行错误
void Swap2(int *a,int *b)
{
    int *p;
    *p=*a;
    *a=*b;
    *b=*p;
}
//正确
void Swap1(int *a,int *b)
{
    int p;
    p=*a;
    *a=*b;
    *b=p;  
}
int main()
{
    int x,y;
    cin>>x>>y;
    Swap(&x,&y);
    cout<<x<<" "<<y<<endl;
    Swap1(&x,&y);
    cout<<x<<" "<<y<<endl;
    Swap2(&x,&y);//运行错误
    cout<<x<<" "<<y<<endl;
}

二、函数返回指针
一个函数可以返回整数,字符,实型等,也可以返回指针,返回指针的函数的定义形式为
类型名* 函数名(参数表):
例如:
int * fa(int a,int b);
fa是函数名,调用它后得到一个指向整数数据的指针(地址j)。注意在*fa的两侧没有括号,在fa两侧分别为*运算符和()运算符,由于()的优先组高于*,因此fa先于()结合。在函数前面有一个*,表示此函数是返回指针类型的函数,最前面的int表示返回的指针指向整数变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<bits/stdc++.h>
using namespace std;
int *fa(int a,int b)
{
    int *p;
    p=new int;
    *p=a+b;
    return p;
}
int main()
{
    int a,b;
    cin>>a>>b;
    int *f;
    f=fa(a,b);
    cout<<*f<<endl;
    return 0;
}

三、函数指针与函数指针数组
一个指针变量通过指向不同的整数变量的地址,就可以对其他的变量操作。
程序中不仅数据是存放在内存空间中,代码也同样存放在内存空间里。具体讲,c++的函数也保存在内存中,函数的入口地址也同样可以用指针访问。
另一方面,有些函数在编写时对要调用的辅助函数尚未确定,在执行时才根据情况为其传递辅助函数的地址,比如sort函数调用:“sort(a,a+n,cmp);"其中的比较函数cmp是我们根据需要转给sort的,其实变就是传递了函数指针。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<bits/stdc++.h>
using namespace std;
int t(int a)
{
    return a;
}
int main()
{
    cout<<t<<endl;
    int(*p)(int a);//定义函数指针变量
    p=t;//获取函数地址
    cout<<p(5)<<" "<<(*p)(10)<<endl;//调用函数
    return 0;
}   

函数指针的基本操作有3个
(1)声明函数指针
声明要指定函数的返回类型及函数的参数列表,和函数原型差不多
例如:函数的原型是int test(int);
相应的指针声明就是int (*fp)(int);
要注意的是,不能写成int *fp(int);
(2)获取函数的地址
获取函数的地址很简单,只要使用函数名即可,例如,fptest;
(3)使用函数指针来调用函数
类似普通变量指针,可以用(*fp)来间接调用指向的函数,但c++也允许像使用函数名一样的使用。

 

posted @   心悟&&星际  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示