牛客网做题笔记 150题

2018-2-18

  • i++ 返回的是右值; ++i返回的是左值

  • (1) 进程间通信方法有:文件映射、共享内存、匿名管道、命名管道、邮件槽、剪切板、动态数据交换、对象连接与嵌入、动态连接库、远程过程调用等

    (2) 事件、临界区、互斥量、信号量可以实现线程同步

  • 发生内存重叠时,拷贝应考虑从前到后还是从后到前。

  • // 对齐原则:每一成员需对齐为后一成员类型的倍数

    // 补齐原则:最终大小补齐为成员类型最大值的倍数

  • 判断语句中出现++ ,即使判false,也要执行++ , –

  • 逗号表达式取最右值为结果

  • free释放的内存不一定直接还给操作系统,可能要到进程结束才释放。

  • malloc申请的是虚拟内存,并不是物理内存。

  • 1 静态链接库的优点

    (1) 代码装载速度快,执行速度略比动态链接库快;

    (2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。

    2 动态链接库的优点

    (1) 更加节省内存并减少页面交换;

    (2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;

    (3) 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;

    (4)适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。

    3 不足之处

    (1) 使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费;

    (2) 使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息。而使用运行时动态链接,系统不会终止,但由于DLL中的导出函数不可用,程序会加载失败;速度比静态链接慢。当某个模块更新后,如果新模块与旧的模块不兼容,那么那些需要该模块才能运行的软件,统统撕掉。这在早期Windows中很常见。

  • 友元:友元是单向的。 2. 友元就是我把秘密告诉你。 3. 不能被继承和传递。

  • int a[5]; &a表示一个指向大小为5数组的指针,那么&a+1就是表示一个指向大小为5的下一个数组的指针,也就是数组a最后一个元素的下一个位置

  • 1.类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑。

    2.普通成员函数与sizeof无关。

    3.含有虚函数的类都会建立一张虚函数表,表中存放的是虚函数的函数指针,这个表的地址存放在类中。虚函数由于要维护在虚函数表,所以要占据一个指针大小,也就是4字节。不管有几个虚函数,都只占四个字节。

    4.类的总大小也遵守类似class字节对齐的,调整规则。

  • include包括”“和<>这两种情况,”“实在用户工作目录下寻找(用户的工作目录是通过编译器指定的),<>是找系统标准库函数,通过系统环境变量指定系统库目录;

2018-1-30

  • double类型

    • 8字节的共64位,按照标准的浮点数表示方法,应该是1位符号位,11位指数位,52位尾数位
    • 小数点后的位权应该是2的负数次方才没有误差,其它的情况都有误差。
    • float有一个符号位,8个指数位,23个尾数位
    • float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
  • 【逻辑表达式】 逻辑与 && (为0)或者逻辑或 ||(为1) 的表达式,先是判断一边,若一边可以判断整个表达式为真假时,另一边不再执行。

  • C++对数组初始化原则是:只要对数组中元素部分初始化,剩余元素都被编译器默认初始化为0.

  • 【左移和右移】在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

    • a = a^(31);此函数就是求取一数与31异或后的值
    • ^符号表示 【异或】
  • sizeof 类

    • 类的大小只与成员变量(非static数据成员变量)和虚函数指针有关,还要考虑到对齐.

    • 1.类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑。

    2.普通成员函数与sizeof无关。

    3.虚函数由于要维护在虚函数表,所以要占据一个指针大小,也就是4字节 。

    4.类的总大小也遵守类似class字节对齐的,调整规则。

  • 使用switch要加上break,否则会从switch的case开始依次执行下面每一个case

  • 父类的指针访问虚函数访问的是子类的方法

  • 指针指向字符串时,字符串是常量,存储在常量区,而指针存储在栈区,不能对其操作修改。

  • 虚函数必须是类的一个成员函数,不能是友元函数,也不能是静态的成员函数

  • 动态分配在堆中,其它的内存分配都在栈上进行。

  • clock()就是该程序从启动到函数调用占用CPU的时间

    time( &t );为获取系统时间

    localtime(&t); 将一个UTC时间转为本地时间

  • 对一个char*串执行strlen的结果未统计’\0’所占用的1个字节。

发布了29 篇原创文章 · 获赞 3 · 访问量 7134

猜你喜欢

转载自blog.csdn.net/liu432linux/article/details/79337704
今日推荐