结构体
像很多基本数据类型 int, short,long,double,结构体是程序员自己自定义的一种数据类型
直接看例子
struct PERSON{
int age;
char sex;
double score;
} xiaoming;
结构体的标签被命名为PERSON,里面包含了三个成员,xiaoming是一个实例变量。
结构体实现较好的封装,就好比Java中定义的一个类。
static和const
static静态成员
1.被static 修饰的变量为存在内存的静态储存区,它的生命周期不会随着函数的调用结束而结束
void test()
{
static int num = 0;
num++;
printf("%d ", num);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();
}
return 0;
}
这个函数的输出结果应该是是1,2,3,4,5,6,7,8,9,10。因为static 修饰的num每次都值都会存在静态区不会因为函数的调用重新赋值给0。
但是如果去掉static 输出的结果应该是 1,1,1,1,1,1,1,1,1,1,1.因为每次在调用test()的时候num都被初始化为0.
const
1.修饰常变量,说明这个值不能被修改。
2.修饰函数的形参,则形参在函数中不能被修改
3.修饰函数的返回值时候,返回值不能被修改。
总结来说就是把值修饰为常量 不可进行修改
volatile
修饰的关键字强制编译器每次都在内存中直接取出来,而不是从缓存或者寄存器中取出。
由于访问缓存区比直接访问内存的效率要高的多,所以在硬件上会引入cache,这样可以减少直接去内存中直接读取数据的开销,但是这种优化有的时候会造成脏读,比如说多线程操作的时候,线程1拿走了数据进行了操作但是还没返回回来,线程2 又取走了数据。