2017/8/18
程序运行结束时才释放;静态变量在内存的静态存储区,静态数据一直占有着该存储单元直到程序结束;一般局部变量在函数调用结束后释放变量占用的存储单元,而静态局部变量不释放。
静态全局变量的作用域只是定义它的文件,不能被其他文件使用;
静态局部变量只声明一次,一旦申请内存成功,不再接受重复申请。
‘-’ :左对齐;30:最小字段宽度;.4:精确度保留小数4位;f:double精度浮点数;e:科学计数法
printf中,%f通杀单精度和双精度;scanf中,%f和%lf才有区别
下面一句是错误的,符合语句形如:
for(int i=0;i<20;i++) ,这里int在for循环之外就无效了
类的静态成员属于整个类,而不是某个对象,可以被类的所有方法访问,子类可以访问父类静态成员;
静态方法属于整个类,在对象创建之前就已经分配空间,类的非静态成员要在对象创建之后才有内存,所有静态方法只能访问惊天成员,不能访问非静态成员。
静态成员可以被任一对象修改,修改后的值可以被所有对象共享。
64位系统下,指针和double占8个字节,int占4个字节,char占一个字节(64位系统下,指针占用64位,8个字节)
加上字节对齐(对齐成8个字节)
所以sizeof(p)=8(p是一个指针);sizeof(*p)=(char 1个字节-->字节对齐成为8字节)+(d作为一个指针占用8字节)+(b作为一个int值占用4字节,int c:16共16位占用两个字节,字节对齐成为8个字节)+(e作为一个double值占用8个字节)=32个字节
sizeof(p->a)=1;sizeof(p->e)=8
贴张图吧:
32
位编译器
char
:
1
个字节
char
*(即指针变量):
4
个字节(
32
位的寻址空间是
2
^
32
, 即
32
个bit,也就是
4
个字节。同理
64
位编译器)
short
int
:
2
个字节
int
:
4
个字节
unsigned
int
:
4
个字节
float
:
4
个字节
double
:
8
个字节
long
:
4
个字节
long
long
:
8
个字节
unsigned
long
:
4
个字节
64
位编译器
char
:
1
个字节
char
*(即指针变量):
8
个字节
short
int
:
2
个字节
int
:
4
个字节
unsigned
int
:
4
个字节
float
:
4
个字节
double
:
8
个字节
long
:
8
个字节
long
long
:
8
个字节
unsigned
long
:
8
个字节
_beginthreadex()比较于CreateThread()有更高的线程安全性,不会造成多个线程公用一个全局变量的情况