zoukankan      html  css  js  c++  java
  • 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又标示他是易变的,不能保证它不会被意外的改变。

  • 相关阅读:
    Qt代码覆盖率code coverage(VS版)
    Qt下Doxygen使用
    QMultiMap使用
    Qt在VS(Visual Studio)中使用
    Qt语言家(Qt Linguist)更新翻译报错Qt5.9MinGW
    Qt Creator插件Todo
    QWidget一生,从创建到销毁事件流
    Qt排序
    QTcpSocketQt使用Tcp通讯实现服务端和客户端
    Qt Creator子目录项目类似VS解决方案
  • 原文地址:https://www.cnblogs.com/HighFun/p/2747313.html
Copyright © 2011-2022 走看看