结构体:
结构是一些值的集合,这些值称为成员变量,每个成员可以是不同的类型变量。
结构体成员的类型:
可以是:标量,数组,指针,结构体…
struct student { char name[20]; short age; char tele[12]; char sex[5]; };//分号不要少,因为是一条声明!!!
1.结构体创建的全局变量与局部变量:
struct student { char name[20]; short age; char tele[12]; char sex[5]; }s1,s2,s3;//是三个全局的结构体变量 int main() { struct student s;//s是创建的结构体变量,这时候才有占用内存空间 }
结构体变量重命名
2.结构体变量重命名
typedef:重新取名字
typedef struct student { char name[20]; short age; char tele[12]; char sex[5]; }stu;//给struct student重新取名字叫stu,stu是类型!!!
结构体变量如何初始化?
3.结构体变量如何初始化?
在创建的同时给其赋值
typedef struct student { char name[20]; short age; char tele[12]; char sex[5]; }stu;//分号不要少,因为是一条声明 int main() { stu s1={"张三",18,"110","女"}; }
结构体中的结构体
4.结构体中的结构体:
(嵌套结构体的初始化)
struct S { int a; char c; char arr[20]; double d; } struct T { char ch[10]; struct S s; char *pc; }; int main() { char arr[]="hehe" struct T t={"hehe",{100,'a',"hehe",3.12},NULL} //里面的这个{}是struct S printf("%s\n",t.ch); printf("%s\n",t.s.arr); }
5.结构体成员的访问
第一种:函数打印
void Print1(Stu tmp) { printf("name:%s\n",tmp.name); } int main() { Stu s={"lisa",18,"1100232","男"}; Print1(s); return 0; }
第二种:指针打印
void Print2(Stu* ps) { printf("name:%s\n",ps->name); } int main() { Stu s={"lisa",18,"1100232","男"}; Print2(&s); return 0; }
比较两种方法:
2较好–节省空间
结论:结构体传参要传结构体的地址
1.栈区的默认使用:
先使用高地址处的空间
再使用低地址处的空间
2.数组随下标增长
地址是由低到高变化的
压栈:放一个数据在栈叫压栈
出栈:删除一个元素