| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3216 人关注过本帖
标题:求教,函数指针变量,同为void,为什么不能void (*)(int *prea, int *preb)" ...
只看楼主 加入收藏
xuzhengwei
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-11-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
求教,函数指针变量,同为void,为什么不能void (*)(int *prea, int *preb)" 类型的值分配到 "void (*
#include <stdio.h>

void swap(int *prea,int *preb)
{
    int temp;
    temp = *prea;
    *prea = *preb;
    *preb = temp;
    return;
}


void main(void)
{
    int a=5,b=6;
   
    void (*p)(); //p是定义指针函数
   
    p = swap;
    printf("交换前a=%d,交换后b=%d",a,b);
    p(&a,&b);
   
    printf("交换后a=%d,交换后b=%d",a,b);
}



很奇怪的是,一开始我用的是vs2010,怎么也运行不成功,一直显示这两个错误:
    1    IntelliSense: 不能将 "void (*)(int *prea, int *preb)" 类型的值分配到 "void (*)()" 类型的实体    c:\users\lyl\desktop\text\text7\text7\text7\text7.c    19    4    text7
    2    IntelliSense: 函数调用中的参数太多    c:\users\lyl\desktop\text\text7\text7\text7\text7.c    21    4    text7

我用c-free也编译不过。
但是我没用指针函数了以后,用了一个普通的swap调用,直接就可以运行了。在接下来,我又把代码改了回去,我按ctrl+f5,它就直接能运行了,我用ctrl+f7编译,还是显示两个错误。编译不通过,但是能直接运行。

由于刚用vs,实在很多地方不是很理解,请各位大神不吝啬赐教,万分感谢。


搜索更多相关主题的帖子: include return 
2016-11-14 12:06
袁小旭
Rank: 2
等 级:论坛游民
帖 子:11
专家分:32
注 册:2016-11-14
收藏
得分:18 
你定义的函数指针 p有问题, 这样定义:void (*p)(int *,int *);
2016-11-14 12:27
EdmundDantes
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:62
专家分:173
注 册:2016-11-9
收藏
得分:2 
我这里运行没有问题,我用的是dev-c++这个工具,目测是编译器没使对,或者你手法有问题
2016-11-14 14:14
xuzhengwei
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-11-9
收藏
得分:0 
回复 2楼 袁小旭
太感谢了,问题已经解决了,看的是网上的视频,用的vs是低版本的,我这2010写的必须按你说的写,实在是非常感谢!!!
2016-11-14 14:40
快速回复:求教,函数指针变量,同为void,为什么不能void (*)(int *prea, int *p ...
数据加载中...
 
   



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

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