主要是一些容易忽视或者不熟练的知识点 1. PRintf从右向左压栈 printf(“%d,%d/n”,*ptr,*(++ptr));
2. 用一个表达式判断2的n次方,但是不准用循环 采用2的n次方的性质 x&(x-1)==0则是2的n次方
3. x&y是x和y相同位的一半 x^y是取x和y不同位 x^y>>1则是x^y不同位的一半
4. C和C++ C语言是一种结构化的语言,重点在于算法和数据结构。 C++首先考虑如何构造一个对象模型,让这个模型能够契合与之对应的问题域
5.用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量
#define FIND(struc,e) (size_t)&(((struc*)0)->e)6.const(1)定义常量(2)修饰函数参数以及返回值提高程序的健壮性
7.const成员函数中,用mutable修饰成员变量名后,就可以修改类的成员变量了
8.sizeof计算栈中分配的大小,所以如果类中有静态变量,因为静态变量是放在全局数据区的,所以计算类大小的时候不会加上静态变量的大小 int b = sizeof c; 如果c是变量名那么这样写也是可以的但是如果sizeof后面是类型则必须加括号
9.const常量赋值时必须初始化
10.注意强转后变量的偏移量问题 class A { public: A() { m_a = 1; m_b = 2; } ~A() {}; void fun() { printf(“A::::a===%d b======%d/n”, m_a, m_b); } private: int m_a; int m_b; };
class B { public: B() { m_c = 3; } ~B() {}; void fun() { printf(“B::::%d”, m_c); } private: int m_c; };
11.继承类的覆盖问题 class A { public: int a; A() { a = 1; } void print() { printf(“%d”, a); } };
class B :public A { public: int a; B() { a = 2; } };
int main() { B b; b.print(); cout << b.a << endl; return 0; }
12.虽然用空指针也会使程序崩溃,但是空指针的情况下造成的崩溃是一种可预料的崩溃,这样调试起来会方便得多。
13. 句柄和指针其实是两个截然不同的概念。windows系统用句柄标记系统资源,隐藏系统的信息,你只要知道有这个东西,然后去调用就行了,是个32位的整型,指针标记某个物理内存地址,两者是不同的概念。
新闻热点
疑难解答