鱼C论坛

 找回密码
 立即注册
查看: 2164|回复: 8

[已解决]一个函数的问题

[复制链接]
发表于 2017-11-18 20:09:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#define size 4
int printfboard();
int main()
{
        int board[size][size];
        printfboard(board[size][size]);
}

原程序出错的地方就是这里,所以我简化了下  也是同样的问题C:\Users\Administrator\Desktop\未命名3.cpp        [Error] too many arguments to function 'int printfboard()'
请问是怎么回事,能讲下原理最好了,还有我应该怎么改呢?

另外有一个问题,我想将一个函数的地址作为形参传进另一个函数里我该怎么做呢?
就像是这样
int add(int a,int b)
int three(int a,int b,int(*p)())
我想把add()这个函数传进three里该怎么写呢
我当时写的是这样three(a,b,add())报错了呢然后我把add()换了好几种写法一样报错。。。
还请指教,谢谢
最佳答案
2017-11-18 20:56:47
参考:
https://www.cnblogs.com/applebunny/archive/2012/09/09/2677307.html

我想将一个函数的地址作为形参传进另一个函数里我该怎么做呢
那就声明个函数指针  然后把这个函数指针传入另一个的函数
#include <stdio.h>
#define size 4

void printfboard(int board[][size]);
int main()
{
        int board[size][size];
        printfboard(board);

                return 0;
}
void printfboard(int board[][size])
{
        int i, j;
        for(i=0; i<size; i++)
        {
                for(j=0; j< size; j++)
                {
                        printf("%d\n", board[i][j]);
                }
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-18 20:39:10 | 显示全部楼层
你的函数在最前面声明的时候,没有参数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-18 20:53:45 | 显示全部楼层
#include<stdio.h>
#define size 4
int printfboard();        //你这里是不带参数的,所以你的调用是不能带参数的,如果要接收参数就必须声明带参数
//如:
int printfboard_a(int a);

int main()
{
        int board[size][size];
        printfboard(board[size][size]);        // 这里只能这样调用 :printfboard();
        printfboard_a(board[size - 1][size - 1]);                //printfboard_a 才是可以带参数的, 至于为什么 下标要 size - 1 ,是因为 下标是从0开始的 长度4 的数组 下标范围是 0-3
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-18 20:56:47 | 显示全部楼层    本楼为最佳答案   
参考:
https://www.cnblogs.com/applebunny/archive/2012/09/09/2677307.html

我想将一个函数的地址作为形参传进另一个函数里我该怎么做呢
那就声明个函数指针  然后把这个函数指针传入另一个的函数
#include <stdio.h>
#define size 4

void printfboard(int board[][size]);
int main()
{
        int board[size][size];
        printfboard(board);

                return 0;
}
void printfboard(int board[][size])
{
        int i, j;
        for(i=0; i<size; i++)
        {
                for(j=0; j< size; j++)
                {
                        printf("%d\n", board[i][j]);
                }
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-18 20:59:24 | 显示全部楼层
函数声明出现错误。
使用指向函数的指针先把指针指向函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-18 21:22:19 | 显示全部楼层
///函数指针声明:
void (*lpfun)(int a);

lpfun lfun; // lfun 才是变量 lpfun 可以看作一个函数类型结构
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-18 22:38:23 From FishC Mobile | 显示全部楼层
1 你声明的函数形参为空,调用时又传递了一个数组,当然通不过编译,要修改的话,你需要根据实际需求修改函数的形参列表
2 传递一个函数进去,写上函数名即可,不用带小括号,也就是这样
result = three(x, y, add)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-18 23:30:55 | 显示全部楼层
ba21 发表于 2017-11-18 20:56
参考:
https://www.cnblogs.com/applebunny/archive/2012/09/09/2677307.html

可是我还是错误了呢。。。我之前也试过声明的时候带参数,但还是失败了
#include<stdio.h>
#define size 4
int printfboard(int board[][size]);
int main()
{
        int board[size][size];
        printfboard(board);
}

错误原因是这样的
7                C:\Users\Administrator\Desktop\未命名3.cpp        undefined reference to `printfboard(int (*) [4])'
C:\Users\Administrator\Desktop\collect2.exe        [Error] ld returned 1 exit status
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-19 00:36:04 | 显示全部楼层
echo000 发表于 2017-11-18 23:30
可是我还是错误了呢。。。我之前也试过声明的时候带参数,但还是失败了
#include
#define size 4

把我上的代码复制上去还能错????????????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 01:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表