CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

奇怪的指针定义指针?

楼主lebor(光速思维)2002-11-21 19:27:31 在 C/C++ / C语言 提问

int   delete_file(dirname,   size,   ent,   filecheck)  
  char       *dirname;  
  int           size,   ent;  
  int           (*filecheck)   ();  
  {  
      ............  
   
    if   ((*filecheck)   (abuf))   {  
   
    ...............  
   
  (*filecheck)();在里面起到什么作用,IF那一行是什么意思?  
   
  请多指教。  
   
  谢谢 问题点数:100、回复次数:15Top

1 楼cwanter(亚玛逊河上的渔夫)回复于 2002-11-21 19:30:30 得分 0

int           (*filecheck)   ();  
  指向函数的指针:返回值为int类型,参数为空。  
  if   ((*filecheck)   (abuf))   {  
  能行吗,恐怕编译不过。Top

2 楼lebor(光速思维)回复于 2002-11-21 19:34:05 得分 0

忘记了,其中还有一行  
  char   *abuf;  
   
  Top

3 楼cwanter(亚玛逊河上的渔夫)回复于 2002-11-21 19:56:39 得分 0

我觉得你的函数指针声明和使用不一致。Top

4 楼lebor(光速思维)回复于 2002-11-21 20:01:51 得分 0

int   delete_file(dirname,   size,   ent,   filecheck)  
  char       *dirname;  
  int           size,   ent;  
  int           (*filecheck)   ();  
  {  
        char         abuf[BUFSIZE];  
        int           fd;  
        struct   stat   st;  
        long         numents;  
   
        if   (size   >   BUFSIZE)   {  
              toobigmesg();  
              return   -1;  
        }  
   
        if   ((fd   =   open(dirname,   O_RDWR))   ==   -1)   return   -1;  
         
        flock(fd,   LOCK_EX);  
        fstat(fd,   &st);  
        numents   =   ((long)   st.st_size)   /   size;  
   
        if   (((long)   st.st_size)   %   size   !=   0)   report("align   err\n");  
   
        if   (lseek(fd,   (off_t)   (size   *   (ent   -   1)),   SEEK_SET)   !=   -1)   {  
              if   (read(fd,   abuf,   size)   ==   size)   {  
                    if   ((*filecheck)   (abuf))   {  
          int           i;  
          for   (i   =   ent;   i   <   numents;   i++)   {  
                if   (lseek(fd,   (off_t)   (i   *   size),   SEEK_SET)   ==   -1)   break;  
                if   (read(fd,   abuf,   size)   !=   size)   break;  
                if   (lseek(fd,   (off_t)   ((i   -   1)   *   size),   SEEK_SET)   ==   -1)   break;  
                if   (safewrite(fd,   abuf,   size)   !=   size)   break;  
          }  
          ftruncate(fd,   (off_t)   size   *   (numents   -   1));  
          flock(fd,   LOCK_UN);  
          close(fd);  
          return   0;  
    }  
              }  
        }  
        lseek(fd,   0,   SEEK_SET);  
        ent   =   0;  
        while   (read(fd,   abuf,   size)   ==   size)   {  
              if   ((*filecheck)   (abuf))   {  
                    int           i;  
    for   (i   =   ent;   i   <   numents;   i++)   {  
          if   (lseek(fd,   (off_t)   ((i   +   1)   *   size),   SEEK_SET)   ==   -1)   break;  
          if   (read(fd,   abuf,   size)   !=   size)   break;  
          if   (lseek(fd,   (off_t)   (i   *   size),   SEEK_SET)   ==   -1)   break;  
          if   (safewrite(fd,   abuf,   size)   !=   size)   break;  
    }  
    ftruncate(fd,   (off_t)   size   *   (numents   -   1));  
    flock(fd,   LOCK_UN);  
    close(fd);  
    return   0;  
              }  
              ent++;  
        }  
        flock(fd,   LOCK_UN);  
        close(fd);  
        return   -1;  
  }  
   
  完整的,通过编译的Top

5 楼sjsj(虚怀若谷)回复于 2002-11-21 20:24:53 得分 5

int   (*filecheck)   ();定义了一个函数指针filecheck  
  调用这个函数的时候只要(*filecheck)()就可以了,但是看了你的代码,我觉得函数声明的时候应该包含一个参数Top

6 楼xspf()回复于 2002-11-21 20:29:52 得分 0

我觉得应该通不过编译的,不知道你用的是什么编译器Top

7 楼alphapaopao(炮炮)回复于 2002-11-21 20:38:10 得分 0

这种函数头部恐怕不能被现代的编译器接受,需要修改一下Top

8 楼lebor(光速思维)回复于 2002-11-22 08:23:59 得分 0

这是FB2000的原代码,gcc编译通过的。  
   
  Top

9 楼NetBird_China(沉默的刀客)回复于 2002-11-22 08:43:41 得分 0

不明白gcc如何编译Top

10 楼zhengguoshan(坚持-决不放弃)回复于 2002-11-22 08:44:57 得分 5

int   (*filecheck)   ();定义了一个函数指针filechec  
  你给它,赋值了吗??Top

11 楼quickball()回复于 2002-11-22 08:58:36 得分 10

int   (*filecheck)   ();  
  filecheck是指向函数的指针。if一行是在判断函数的返回值。Top

12 楼yimanet(网际飞蚁)回复于 2002-11-22 09:30:16 得分 5

int   (*filecheck)   ();  
  一个返回值是int,无参数的函数指针。  
  if   ((*filecheck)   (abuf))   是判断该函数的返回值,  
  但是你的定义和调用不一样我在C++BUILDER5和VC++6中编译通不过。Top

13 楼dsangvei(十年一剑)回复于 2002-11-22 09:45:43 得分 5

int           (*filecheck)   (char*);  
  可以这样申明  
  Top

14 楼xspf()回复于 2002-11-25 19:44:59 得分 50

int   (*filecheck)   ();//定义了一个指向函数的指针filecheck  
   
  可以用if   ((*filecheck)   (abuf))   ,但前提是必须把参数为char*的函数的入口地址赋给filecheck,楼主的代码没有给全,filecheck没有被赋值  
  Top

15 楼Louis819()回复于 2002-11-25 20:08:19 得分 20

我感觉没有问题,filecheck是函数指针,作为参数使用。需要在主程序中对filecheck进行赋值。Top

相关问题

  • 有关定义指针
  • c++中定义指针常量?
  • 怎么定义这个指针?
  • 怎样定义函数指针?
  • 关于typedef定义指针的问题
  • 怎样定义一个指针指针类型?
  • 我定义了一个类,如何定义一个类指针?
  • 奇怪的宏定义?
  • 奇怪的struct定义
  • 很奇怪的指针赋值问题.

关键词

  • 指针
  • filecheck
  • abuf
  • ent
  • dirname
  • fd
  • size
  • st
  • long
  • char

得分解答快速导航

  • 帖主:lebor
  • sjsj
  • zhengguoshan
  • quickball
  • yimanet
  • dsangvei
  • xspf
  • Louis819

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo