基础概括(变量 结构体)
根据作用范围:变量类型可分为局部变量和全局变量。
局部变量:在函数内部定义的变量(代码块中定义)。包括函数的形参。
全局变量:在函数外面定义的变量;
生命周期:从定义变量的那一行起,分配存储空间。
局部变量的生命周期:从执行局部函数代码块 开始到结束。
全局变量的生命周期:从程序启动那一刻起分配存储空间,一直到整个程序结束推出时,才会被销毁。
结构体:由多种不同数据类型组成。
用struct 后加上定义的 类名 比如:(struct Person)
要根据结构体的类型定义结构体的变量。
只能在定义结构体变量的同时赋值 (与数组相同),
结构体内存分析:
定义结构体类型是没有分配存储空间的,只会为变量分配存储空间。
例如;int a 系统只会为变量a分配存储空间,而不会为int 这种类型分配存储空间。
系统默认情况下为结构体分配存储空间是会根据结构体变量的个数,以及最大变量的字节数来分配存储空间,比如:结构体变量中有3个成员,int ,double, char 那么系统会分配 3乘以8个字节的空间的内存。
这就是补齐也叫做对齐算法:给结构体分配空间的时候,结构体占用的空间一定是最大成员字节数的倍数,有几个成员就是几倍。
定义结构体变量有两种方式:
1,struct Student
{
int age;
double height
char *name;
} ;
struct Student stu ={20,1.78,"jack"}; 最简单方式。
2,struct Student
{
int age;
double height;
char *name;
} stu;
struct Student stu;
不能在函数中出现两个相同的结构体形式,系统会报结构体重复定义错误。
还有第三种方法是省略了结构体类型,比如:
struct( )
{
}stu; 这种类型也对 ,但不推荐,性能不好。
上面的两种代码做了两件事情:
1,定义结构体类型。
2,利用先定义好的类型,来定义结构体变量。
结构体类型的作用域:
从定义类型的额那一行开始,一直到代码块结束。
结构体数值
与数组相同,结构体只能在初始化时进行赋值。