正在阅读:《编程高手箴言》读后(4)《编程高手箴言》读后(4)

2004-04-08 14:39 出处:CSDN 作者:seacloud 责任编辑:sdq

  BTW,大家注意一下下面的这段代码:
  struct A
  {
   int a;
   int b;
   int c;
  };

  &(((struct A *)NULL)->b));  //这里是取b在结构里的偏移,一些OS kernel代码会实现一些通用数据结构,比如单向链表,就会利用这种技术。具体的可以看DDK,或者在linux kernel代码里用list搜索一下,这些实现蛮巧妙的。

  在这个类中的函数不会取出正确的地址,因为它生成时就是动态分配一个地址。
=========================================
  这话其实也不对,在VC里可以用下面的“脏”代码来获取一个类成员函数的地址,并且来调用它:

  #include <stdio.h>
  #include <iostream>
  using namespace std;

  class A
  {
  public:
      int a;
      void sayHello() { cout << "A::sayHello()" <<endl; }
  };

  typedef void (A::*PFN)();     //不清楚的同志去看《Thinking in C++》
  typedef void (*P_SAYHELLO)(); //不清楚的同志随便去查一本C语言的书

  int main()
  {
      char str[100];
      PFN pFn;
      P_SAYHELLO pSayHello;

      pFn = &A::sayHello;
      sprintf(str, "%d", pFn);
      pSayHello = (P_SAYHELLO)atoi(str);
      (*pSayHello)();

      return 0;
  }

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品