c++ sample
位移凑数
stt st1 = {i1=222, i2=333};
int t1 = (st1.i1 << 16 | st1.i2); //i1,i2合体, i1左移到高位, i2放到右边低位
int i1 = (t1 >> 16); //右移去低位, 剩i1
int i2 = (t1 ^ (i1 << 16); //去左边高位头, 剩i2
紧凑结构
struct S1 {
int32_t a;
int b;
int c;
} __attribute__ ((packed));
友元类
class B {
public :
int geta();
};
class A {
private :
int a;
friend class B;
};
int B::geta() {
A a1;
a1.a = 2;
return a1.a;
}
B b;
b.geta() == 2;
函数指针
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
f = &func;
int add(int a, int b);
int subtraction(int a, int b);
struct p_fun {
int (*pFunAdd) (int a, int b);
int (*pFunSubtraction) (int a, int b);
};
int main() {
p_fun pFun;
pFun.pFunAdd = add;
pFun.pFunSubtraction = subtraction;
printf("%d, %d", pFun.pFunAdd(1, 2), pFun.pFunSubtraction(2, 1));
return 0;
}
指针交换
{
int i;
i = *p1; //p1缓存到i
*p1 = *p2;
*p2 = i; //p2=原p1
}
指针计算
{
*p, *q;
q = p - 1;
p - q == 1; //偏移
(int)p - (int)q = 8; //地址值
}
成员函数指针
class MyClass {
public:
static int FunA(int a, int b) {return a + b;}
void FunB() {...}
void FunC() {}
int pFun1(int (*p)(int, int), int a, int b) {return (*p)(a, b);}
void pFun2(void (MyClass::*nonstatic)()) {(this->*nonstatic)();}
};
int main() {
MyClass* obj = new MyClass;
// 静态函数指针的使用
int (*pFunA)(int, int) = &MyClass::FunA;
cout << pFunA(1, 2) << endl;
// 成员函数指针的使用
void (MyClass::*pFunB)() = &MyClass::FunB;
(obj->*pFunB)();
// 通过 pFun1 只能调用静态方法
obj->pFun1(&MyClass::FunA, 1, 2);
// 通过 pFun2 就是调用成员方法
obj->pFun2(&MyClass::FunB);
obj->pFun2(&MyClass::FunC);
delete obj;
return 0;
}
functio