温故知新

来源:互联网 发布:nginx php 张宴 编辑:程序博客网 时间:2024/04/29 18:54

主要是一些容易忽视或者不熟练的知识点
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位的整型,指针标记某个物理内存地址,两者是不同的概念。

0 0
原创粉丝点击