指针是指向一些内存地址的变量,即可以是数据的地址也可以是函数的地址
来一个简单的结构 如果有一个这样结构的指针sp和对象so,可以通过下面方法
选择成员
//: C11:SimpleStructure.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
struct Simple { int a; };
int main() {
Simple so, *sp = &so;
sp->a;
so.a;
} ///:~
现在,假设有一个普通的指向integer的指针ip。 为了取得ip指向的内容,
用一个*号间接引用这个指针
*ip = 4;
考虑如果有一个指向一个类对象成员的指针,如果假设它代表对象内一定的
偏移,会发生什么?
为了取得指针指向的内容,必须用*号间接引用
如何建立和使用指向数据成员的指针
//: C11:PointerToMemberData.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#include <iostream>
using namespace std;
class Data {
public:
int a, b, c;
void print() const {
cout << "a = " << a << ", b = " << b
<< ", c = " << c << endl;
}
};
int main() {
Data d, *dp = &d;
int Data::*pmInt = &Data::a;
dp->*pmInt = 47;
pmInt = &Data::b;
d.*pmInt = 48;
pmInt = &Data::c;
dp->*pmInt = 49;
dp->print();
getchar();
} ///:~
除了对于一些特例,需要精确地指向,这里就显得有些过于难用而无法随处
使用
成员指针是受限制是,它们仅能被指定给类中的确定的位置
我们不能使用普通指针那样增加或比较成员指针
扫描二维码关注公众号,回复:
2492342 查看本文章
输出
a = 47, b = 48, c = 49