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;
4、const volatile char* p = “aaa”;
上面标示的是指针p指向的内容是个定值,是只读的,不能发生变化的,但是volatile又标示他是易变的,不能保证它不会被意外的改变。