| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1548 人关注过本帖
标题:有关函数指针变量的疑惑,请看看。
只看楼主 加入收藏
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:14 
有关函数指针变量的疑惑,请看看。
程序代码:
#include<stdio.h>
typedef int (*p)
int fun(int a)
{
   
    return(a);
}
void main()
{
   
    int b=2;
    int z;
    p q;
   
    q=fun;
    //z=(*q)(b)
     z=q(b);   
printf("%d\n",z);
   
   
}
  就这两句语句都正确//z=(*q)(b)
                        z=q(b);
  但,为什么(*q)(b)和q(b)的效果会是等同的,连调试的参数都是一模一样的?
q=fun;这句只是把函数fun赋值给q这个函数指针变量啊,后面是z=q(b);,输出结果
居然是z的值,难道说调用指针变量q可以直接就执行函数体fun?  
2016-10-08 16:59
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:5 
#include<stdio.h>
typedef int (*p)
int fun(int a)
 {
   
     return(a);
 }
void main()
 {
   
     int b=2;
     int z;
     p q;   //这是什么,能编译通过?
   
     q=fun;  //函数也没带实参
     //z=(*q)(b)
     z=q(b);   
 printf("%d\n",z);
   
   
 }
2016-10-08 17:03
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
回复 2楼 ehszt
typedef int  (*p)();  粘贴少了,不好意思。
2016-10-08 17:55
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
回复 2楼 ehszt
q=fun是地址赋给q
2016-10-08 17:58
NiuYoohoo
Rank: 4
等 级:业余侠客
威 望:2
帖 子:65
专家分:216
注 册:2016-10-8
收藏
得分:0 
你明白函数的堆栈吗?还有指针只是用来存储地址的一种类型。
2016-10-08 17:58
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
回复 5楼 NiuYoohoo
能就我的问题解释清楚点吗?
2016-10-08 18:03
NiuYoohoo
Rank: 4
等 级:业余侠客
威 望:2
帖 子:65
专家分:216
注 册:2016-10-8
收藏
得分:0 
回复 6楼 弟大勿勃
#include <string>
#include <iostream>
#include <cstdio>
using namespace std;



typedef int (*pfun)(int,int);

int fa(int x,int y)
{
    return y;
}

int fb(int x,int y)
{
    int *p=&x;
    return *(++p);
}

int main()
{
    //直接
   cout<<fa(1,2)<<endl;
   cout<<fb(1,3)<<endl;

   ///
   pfun testA=fa;
   cout<<testA(1,2)<<endl;
   cout<<(*testA)(1,3)<<endl;

   printf("%d\n",testA);
   printf("%d\n",(*testA));
   printf("%d\n",****(*testA));
    return 0;
}
希望你能明白
2016-10-08 18:12
NiuYoohoo
Rank: 4
等 级:业余侠客
威 望:2
帖 子:65
专家分:216
注 册:2016-10-8
收藏
得分:0 
回复 7楼 NiuYoohoo
#include <string>
#include <iostream>
#include <cstdio>
using namespace std;



typedef int (*pfun)(int,int);

int fa(int x,int y)
{
    return y;
}

int fb(int x,int y)//返回y但是我并没有用到y而是通过x得到y
{
    int *p=&x;
    return *(++p);
}

int main()
{
    //直接
   cout<<fa(1,2)<<endl;
   cout<<fb(1,3)<<endl;

   ///
   pfun testA=fa;
   cout<<testA(1,2)<<endl;
   cout<<(*testA)(1,3)<<endl;

   printf("%d\n",testA);
   printf("%d\n",(*testA));
   printf("%d\n",****(*testA));///你可以随意n个*
    return 0;
}

2016-10-08 18:14
NiuYoohoo
Rank: 4
等 级:业余侠客
威 望:2
帖 子:65
专家分:216
注 册:2016-10-8
收藏
得分:0 
回复 6楼 弟大勿勃
明白了吗?
2016-10-08 18:18
NiuYoohoo
Rank: 4
等 级:业余侠客
威 望:2
帖 子:65
专家分:216
注 册:2016-10-8
收藏
得分:0 
容我装个B:其实就一句话,函数是通过堆栈方式调用,函数名就是对应的函数地址
2016-10-08 18:21
快速回复:有关函数指针变量的疑惑,请看看。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039881 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved