zoukankan      html  css  js  c++  java
  • Windows程序设计笔记

    宽字元:wchar_t  没有具体定义位数,但通常都是以0x00**表示,在内存中以 ** 00形式存储,因此用strlen不能读取字符长度

    C语言中汉字需要用两个字节存储,字符串结尾通常会以/0来做标志,因此开数组的时候需要多开一位,sizeof的话也会多显示一位,输出汉字需要用连续两位ASCII码表示printf("%c%c",206,210);可以输出我,这里有篇文章是关于编码的来历的:这里

    window程序设计不同于普通编程,windows编程是基于事件驱动编程模型,应用程序通过处理操作系统发来的消息相应事件,而一般编程则是从头到尾依次执行,中间会调用函数

    windows的API函数封装在dll(动态链接库)中

    静态变量

    在介绍静态变量之前,先来介绍局部变量和全局变量。变量按照作用范围的不同可以划分为局部变量和全局变量。局部变量是指在函数内定义的变量,在函数调用结束后,局部变量将消失。而全局变量是指在函数体外定义的变量,它的生命期随着程序的结束而结束。静态变量主要是针对局部变量的,如果定义一个静态的局部变量,它的生命期在函数调用结束后会依然存在,在下次调用函数时,会依然保存上一次函数调用结束之后的值。并且,对于静态变量只执行一次初始化(无论函数调用多少次)。在C++中,静态变量是使用static关键字来定义的。

    用static修饰后,输出0,1,2,3,。。。如果不用的话只会输出00000

    外部变量:

    外部变量用于告诉编译器在其他文件的全局区域存在一个全局变量,目的是在当前的文件中能够访问这个全局变量(意思就是说使其他文件也能访问它)

    共用体Union,和结构体类型定义相似,但在同一时刻只能使用共用体中的一个成员,因为共用体所有成员共享相同的内存空间

    内联函数 inline

    所谓内联函数是指对于程序中出现函数调用的地方,如果函数是内联函数,则编译器直接将函数代码赋值到函数调用的地方,这样省去了跳转到函数定义的地方执行代码,然后再返回到调用函数处的一个过程,提高程序的执行效率。但是内联函数的一个最大缺点是增加了代码的程序,可以想下,如果一个内联函数有上千行的代码工程序中多次出现该函数的调用,执行程序的代码将是多么庞大。但是,对于代码较少、经常需要调用的函数,将其定义为内联函数,则可以显著提高程序的执行效率。

    对象是类的实例化

    public,protected,private

    public编辑的成员(成员和方法)称为共有成员,public成员可以在程序的任何地方进行访问。protected标记的保护成员,该成员只能在该类和该类的派生类(子类)中访问,初次之外,程序的其他地方不能访问保护成员。private标记的成员称为私有成员,该成员只能在该类中访问,派生类以及程序的其他地方均不能访问私有成员

     

    Union

    输出266

    #include<cstdio>
    union
    {
      int i;
      char x[2];
    }a;
    
    int main()
    {
        a.x[0] =10;
        a.x[1] =1;
        printf("%d",a.i);
    }
    View Code

    用C++实现 strlen和strcpy

    #include <assert.h>
    #include <stdio.h>
    int strlen(const char*str )
    {
    assert( str != NULL );
    int len = 0;
    while( (*str++) !='' )
    {
    len++;
    }
    return len;
    }
    char* strcpy(char*strDest, const char*strSrc)
    {
        assert((strDest!=NULL) && (strSrc !=NULL));
        char* address = strDest;
        while( (*(strDest++)=*(strSrc++)) !='' )  NULL;
        return address ;
    }
    int main()
    {
        char strDest[50];
        int length = strlen( strcpy( strDest, "Hellossss") );
        printf("%d
    ",length);
    }
    View Code

    int main(){}必须返回0,表示成功,任何非0值都表示失败

    << (‘‘put to’’)

    >> get from

    & Ampersand

    +x //unary plus

    x%y // remainder (modulus) for integers

    : colon

    什么时候不用auto

    We use auto where we don’t hav e a specific reason to mention the type explicitly. ‘‘Specific
    reasons’’ include:
    • The definition is in a large scope where we want to make the type clearly visible to readers
    of our code.
    • We want to be explicit about a variable’s range or precision (e.g., double rather than float).

    constexpr: meaning roughly ‘‘to be evaluated at compile time’’

    const int dmv = 17; // dmv is a named constant
    int var = 17; // var is not a constant
    constexpr double max1 = 1.4∗square(dmv); // OK if square(17) is a constant expression
    constexpr double max2 = 1.4∗square(var); // error : var is not a constant expression
    const double max3 = 1.4∗square(var); //OK, may be evaluated at run time

    关于虚函数表:链接

    C++ 值传递、指针传递、引用传递详解

    C++ explicit关键字详解

    Friend

    冒号初始化

    抽象类和接口的区别

    关键字 const 是什么含意?

    const int a; 

    int const a; 

    const int *a; 

    int * const a; 

    int const * a const;

    前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)

     

    关键字volatile有什么含意并给出三个不同的例子

    一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

    1). 并行设备的硬件寄存器(如:状态寄存器)

    2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 

    3). 多线程应用中被几个任务共享的变量

    1、编译器优化介绍 
         内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用CPU指令流水线,常见的是重新排序读写指令。对常规内存进行优化的时候,这些优化是透明的,而且效率很好。

     内联汇编的问题比较复杂。首先我们来看允许内联汇编之后的魔法有哪些
    1. 无限栈,内联汇编直接操作寄存器,从此又诞生许多题。
    2. 混淆代码,从此查作弊成了空想。
    3. 越来越多的人会汇编之后,Arbitrary评测器的安全性堪忧,有朝一日必然爆炸。

    MD5 链接

  • 相关阅读:
    服务器又100%了,上一个挖矿病毒解决完,这几天又来了一个新的挖矿病毒。。。。
    一些面试题
    家庭应急储备物资分类
    所学习的docker
    Mysql主从复制原理及同步延迟问题
    关于git
    小程序的get和post需要注意的地方
    CSS3 3D转换
    transform CSS3 2D知识点汇总
    HTML5基础知识总结(一)
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/6662087.html
Copyright © 2011-2022 走看看