| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2403 人关注过本帖
标题:关于指针调用函数的问题,不知道哪里错了
取消只看楼主 加入收藏
hc407647719
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-4-21
结帖率:57.14%
收藏
已结贴  问题点数:8 回复次数:5 
关于指针调用函数的问题,不知道哪里错了
p = max;大概是这一行错误,但是我看书上好像是可以这样赋值的啊,不是说函数名代表了函数的入口地址吗?
具体是哪里错了,怎么修改呢,谢谢了

//指针调用函数

# include <stdio.h>
# define M 8
float max(float a[], int n);

int main (void)
{
    float sumf, sump;
    float a[M] = {11, 2, -3, 4.5, 5, 69, 7, 80};
    float (* p)();

    p = max;
    sump = (*p)(a, M);                    //指针间接调用函数
    sumf = max(a, M);                    //直接调用

    printf("sump = %.2f\n", sump);
    printf("sump = %.2f\n", sumf);

    return 0;
}

float max(float a[], int n)                //求出数组元素中最大值
{
    int k;
    float s;
    s = a[0];
    for(k=0; k<n; k++)
    {
        if(s<a[k])
            s = a[k];
    }
   
    return s;
}
搜索更多相关主题的帖子: include 
2016-04-22 15:30
hc407647719
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-4-21
收藏
得分:0 
以下是引用nupt_陈小二在2016-4-22 15:54:14的发言:

我运行是对的啊


指针调用函数.cpp
F:\Cli\指针调用函数.cpp(13) : error C2440: '=' : cannot convert from 'float (__cdecl *)(float [],int)' to 'float (__cdecl *)(void)'
        This conversion requires a reinterpret_cast, a C-style cast or function-style cast
F:\Cli\指针调用函数.cpp(14) : error C2197: 'float (__cdecl *)(void)' : too many actual parameters
执行 cl.exe 时出错.

指针调用函数.obj - 1 error(s), 0 warning(s)
2016-04-22 15:57
hc407647719
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-4-21
收藏
得分:0 
以下是引用zhulei1978在2016-4-22 15:57:42的发言:

 int main (void)
 {
     float sumf, sump;
     float a[M] = {11, 2, -3, 4.5, 5, 69, 7, 80};
     float (* p)();

     p = max;

你那个定义有问题吧,函数指针的定义应该把该指针所指向的函数的形参列表也定义进去:
float (*p)(float *,int);

根据你的提示修改了,现在通过了,怎么必须这样修改呢,好像书上没有讲过这样的定义,是有什么原因吗
2016-04-22 16:02
hc407647719
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-4-21
收藏
得分:0 
以下是引用吹水佬在2016-4-22 16:10:49的发言:

# include <stdio.h>
# define M 8
float max(float a[], int n);

int main (void)
{
    float sumf, sump;
    float a[M] = {11, 2, -3, 4.5, 5, 69, 7, 80};
    float (*p)(float a[], int n);

    p = &max;
    sump = p(a, M);                    //指针间接调用函数
    sumf = max(a, M);                    //直接调用

    printf("sump = %.2f\n", sump);
    printf("sump = %.2f\n", sumf);

    return 0;
}

float max(float a[], int n)                //求出数组元素中最大值
{
    int k;
    float s;
    s = a[0];
    for(k=0; k<n; k++)
    {
        if(s<a[k])
            s = a[k];
    }
   
    return s;
}


max不是函数入口吗,代表地址

[此贴子已经被作者于2016-4-22 16:33编辑过]

2016-04-22 16:31
hc407647719
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-4-21
收藏
得分:0 
回复 7楼 zhulei1978
好的,谢谢
2016-04-22 16:32
hc407647719
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-4-21
收藏
得分:0 
回复 10楼 zhulei1978
C语言程序设计教程    大学的书郭浩志的
2016-04-22 17:43
快速回复:关于指针调用函数的问题,不知道哪里错了
数据加载中...
 
   



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

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