一、全局变量和局部变量
(1)全局变量定义在函数外,局部变量在函数体内,前后作用域不同,生命周期也不同。
二、结构体
(1)定义了结构体不会分配内存,只有用结构体定义了变量才会为这个变量分配内存。第一个成员的地址就是结构体变量的地址。
int main(int argc, const char * argv[]) { //结构体的格式 struct person{ int age; char *name; }; //定义变量 struct person p1; //赋值,多种赋值方式,比如 struct person p2={10,"tom"}; p1.age=28; p1.name="andy"; //访问 printf("%s\n",p1.name); return 0; }
(2)分配的空间大小是占用最大字节成员变量的倍数。比如上述结构体,int是4字节,char *是8字节,一共是12字节,但为了要是最大字节成员的整数倍,所以每个结构体变量一共是16字节。
(3)还有很多种方式定义结构体变量。除了以上方法,还可以在定义结构体的同时在后面分号前面加个p,直接定义一个变量。还有一种方式是匿名结构体,这种匿名结构体只能一次性定义变量,因为后续不能复用。
(4)结构体数组。就是在定义结构体变量的时候批量定义并初始化。如struct person p[3]={{},{},{}};。但很少用。结构体数组只能在定义的时候初始化。
(5)结构体和数组一样,不可以先定义变量,然后再赋值。
(6)指向结构体的指针,因为是指向结构体的,所以定义方式就是struct person *p;即可。p=&p1;就是把这个指针指向p1。重点是如何取值。可以用(*p).age;但是更普遍的是p->age。
(7)结构体,当然可以嵌套使用。
(8)结构体相比数组最大特点是,里面可以存放不同类型数值,而数组只能是同种数值。
三、枚举变量
int main(int argc, const char * argv[]) { //尽量不要使用数值,所有数值都是魔鬼数值 //int gender=0; //定义一个枚举 //我们可以给MAN=100,那么下面的值是一次递增的,即WOMAN是101 enum Gender{ MAN, WOMAN }; //使用并定义一个枚举变量gender1 enum Gender gender1=MAN; return 0; }
时间: 2024-12-05 01:37:57