【问题标题】:not so obvious pointers不是那么明显的指针
【发布时间】:2010-03-23 00:19:20
【问题描述】:

我有一堂课:

class X{
 public :
 void f ( int ) ;
 int a ;
} ;

任务是“在代码内部提供声明:

  • 指向类 X 的 int 变量的指针
  • 指向类 X 中定义的函数 void(int) 的指针
  • 指向 X 类双变量的指针

好的,所以指向 int a 的指针就是 int *x = &a,对吧?如果 X 中没有双精度,我可以在此类中创建指向双精度的指针吗?而最大的问题是第二个任务。如何声明指向函数的指针?

【问题讨论】:

  • 您是否被要求提供常规指针或指向成员的指针?
  • 我认为这些问题是在询问指向成员和指向成员函数的指针,尽管我可能是错的。查找那些,但首先查找函数指针。

标签: c++ pointers


【解决方案1】:

这些被称为pointers to members。它们不是常规指针,即不是地址,而是类实例的“某种”偏移量(使用虚函数有点棘手。)所以:

  1. int X::*ptr_to_int_member;
  2. void (X::*ptr_to_member_func)( int );
  3. double X::*ptr_to_double_member;

【讨论】:

    【解决方案2】:

    您需要将它们声明为指向成员的指针。指向成员的指针与通常的指针不同,它们是结构或类成员的地址,而不是像常规指针那样的绝对地址。

    欲了解更多信息,请阅读this。

    【讨论】:

      【解决方案3】:

      指向任何类型的指针在类型名和变量名之后用“*”声明:

      Franks_Class * p_franks_class; // Declares a pointer to an instance of Franks_Class.
      

      更晦涩的声明是针对函数的:

      typedef void (*My_Int_Function_Ptr)(int parameter);
      

      它声明了一个类型(同义词),名为 My_Int_Function_Ptr,一个指向函数的指针,该函数采用 int 参数并返回 void。

      从这本书和一本好 C++ 书籍中,您应该能够回答其余的问题。

      【讨论】:

        猜你喜欢
        • 2016-04-14
        • 2023-03-28
        • 2015-07-22
        • 2017-10-02
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-06
        相关资源
        最近更新 更多