• C/C++零碎知识整理(二)


    1、寄存器变量

     寄存器变量是存放在寄存器中的,使用关键字register来定义,寄存器变量只能定义在函数中,不能用取地址符“&”来操作,因为它在寄存器中,不在内存中,因此没有地址,寄存器变量数量是有限制的,超过限制的变量自动转为自动变量。其优点是速度快。

    2、volatile

    volatile表示的是变化的,异变的。

    告诉编译器不要去假设这个变量的值,每次使用的时候要重新读取这个变量的值。 一般在嵌入式的开发中比较常见,或者在多线程中比较常见。

     1 int i = 0;
     2 void fun(LPVOID p)
     3 {
     4     i = 3;
     5     cout<<"fun"<<endl;
     6 }
     7 int _tmain(int argc, _TCHAR* argv[])
     8 {
     9      HANDLE hThread = CreateThread(
    10            NULL, // default security attributes
    11              0, // use default stack size
    12                fun, // thread function
    13                  NULL, // argument to thread function
    14                    0, // use default creation flags
    15                      &dwThreadId[i]); // returns the thread identifier
    16 
    17      i = 2;
    18      while(i == 2)
    19      {
    20 
    21      }
    22      cout<<"main"<<endl;
    23 }

    这里打印的结果将是

    fun

    不会出现“main”,因为编译器将代码进行了优化,

    while(i == 2)优化成了while(1),结果变成了死循环。

    如果给i加上volatile,就不会出现这种情况。

    3、怎么样将指针指向某一个地址

    int * ppn=0;
    ppn = (int *) 0x577a80 ;

    4、const volatile char* p = “aaa”;

    上面标示的是指针p指向的内容是个定值,是只读的,不能发生变化的,但是volatile又标示他是易变的,不能保证它不会被意外的改变。

  • 相关阅读:
    python+requests——定制请求头——cookie
    python+requests——高级用法——上传文件
    彻底搞定C指针例题
    static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
    单链表的基本操作
    new int[10]()
    用人单位给计算机系学生的一封信(超长评论版)
    指向二维数组的指针
    《windows程序设计》第一章学习心得
    VS2010编译Lua程序
  • 原文地址:https://www.cnblogs.com/HighFun/p/2747313.html
Copyright © 2020-2023  润新知