牛骨文教育服务平台(让学习变的简单)
博文笔记

c语言细节知识点

创建时间:2013-12-20 投稿人: 浏览次数:652

在本次线程内,当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后再取变量值时,就直接从寄存器中取值;

当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致

当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致

当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致

Offsetof是C语言的一个宏;(size_t)&(((s*)0)->m)

求一个结构体的偏离量:(s *)0 是骗编译器说有一个指向类(或结构)s的指针,其值为0   
&((s *)0)->m   是要取得类s中成员变量m的地址   
由于这个类(或结构)的基址为0,这时m的地址当然就是m在s中的偏移了


C语言: static用法
1:为了控制作用区域
2:全局变量控制

放在静态区域的数据变量只有:全局变量,static变量     (如果没有初始化,编译器都为他们赋默认值)

3: static 有默认之值:如果是整形:默认0   字符串:‘/0’

如:

void main(){

   static int a;

  static char b[10];

}



C++:static

在加上C的作用外
 1.静态成员函数不能为虚函数   

    因为静态成员是没有this的,并且它是编译已经确定了
 2.子类继承父类的static变量(也可覆写掉)


 3.初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆;
 由于可能多包含文件头问题:一般在头文件中不会定义变量,只声明变量;


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。