结构中的相对地址:

C++中的函数地址和成员地址不能用来输出,(因为没有理由拿来输出),输出的话总为true。

cout << &main<< endl;

联合: C++中的匿名联合

#include <iostream>
using namespace std;
//结构变量.*成员指针,结构指针->*成员指针
struct date{
int year;
int month;
int day;
void print(){cout<<year<<'-'<<month<<'-'<<day<<endl;}
};
void f(double d){cout<<d<<endl;}
void showmember(date a[], int n, int date::*p)
{
for(int i=0; i<n; i++){
cout << (a+i)->*p << ' ';
}
cout << endl;
}
int main()
{
date a[5]={{2010,8,16},{2010,10,1},{2008,8,8},{2012,12,20},{1999,12,30}};
date d={1997,7,7};
cout << "&d=" << &d << endl;
cout << "&d.year=" << &d.year << ", &d.month=" << &d.month << ", &d.day=" << &d.day << endl;
cout << &date::year << &date::month << &date::day << endl;
// cout << &main << &f << endl;

//成员指针
union{
int n;
int date::*mp;//  成员指针
}; //联合本身不是类型,直接变量联合,匿名联合,里面的成员公用一块空间,里面的成员可以直接使用
mp = &date::day;//mp存的地址也存到n中
cout << "n=" << n << endl;//(相对偏移)
cout << d.*mp << endl;
mp = &date::year;  //成员地址不依赖于某一个结构变量  //成员地址或者成员指针通过相对偏移量访问成员
cout << d.*mp << endl;
showmember(a, 5, &date::month);
showmember(a, 5, &date::year);
showmember(a, 5, &date::day);
d.print();
a[3].print();
void (date::*pf)()=&date::print;
(d.*pf)();
(a->*pf)();
}

//.* 最为一个操作符  ->* 操作符

 成员指针介绍更详细的链接:http://blog.csdn.net/e5max/article/details/11678259