没那么明显的指针

时间:2010-03-23 00:19:20

标签: c++ pointers

我有一个班级:

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

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

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

好的,所以指向int a的指针只是int * x =& a,对吧?如果X中没有double,我是否已经在这个类中创建了double的指针?最大的问题是第二项任务。如何声明指向函数的指针?

3 个答案:

答案 0 :(得分:3)

这些被称为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;

答案 1 :(得分:1)

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

有关详情,请参阅this

答案 2 :(得分:0)

在类型名称和变量名称之后,使用'*'声明指向任何类型的指针:

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 ++书中,您应该能够回答其余的问题。