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又标示他是易变的,不能保证它不会被意外的改变。

原文地址:https://www.cnblogs.com/HighFun/p/2747313.html