结构体是一些值的集合,这些值就是成员变量,每个成员变量可以是不同的类型,当然也可以是结构体类型。
结构体的声明:
struct stu{ //struct ---结构体关键字;stu---结构体标签;struct stu---结构体类型
char name[20];
short age;
char tale[12];//成员变量
char sz[5];}s1,s2,s3;//s1,s2,s3是全局结构体变量
int main(){
struct stu s;//是局部结构体变量
return 0;}
结构体变量的定义和初始化:
struct point {
int x;
int y;
}p1;//声明类型的同时定义变量p1
int main(){
struct point p2;//定义结构体变量p2;
struct point p3={x,y};//定义结构体变量的同时赋值
}
#include<stdio.h>
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[]="hello bit\n";
struct T t={"hehe",{100,'w',"helloworld",3.14},arr};
printf("%s\n",t.ch);//hehe
printf("%s\n",t.s.arr);hello world
printf("%s\n",t.s.d);//3.14
printf("%s\n",t.pc);//hello bit
return 0}
#include<stdio.h>
typedef struct stu{
char name[10];
short age;
char tele[12];
char sex[5];}stu;
void point1(stu tmp){
printf("name:%s\n",tmp.name);
printf("age:%d\n",tmp.age);
prinf("tele:%d\n"tmp.tele);
printf("sex:%d\n",tmp.sex);
void print2(stu*ps){
printf("name:%d\n",ps->name);
printf("age:%s\n",ps->age);
printf("tele:%d\n",ps->tele);
printf("sex:%s\n",ps->sex);}
int main(){
stu s={"李四",40,"12345678912","男”);
print1(s);
print2(&s);
return 0;}//采用print2传址方式更好,因为在函数传参的时候,函数是需要压栈的,如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销更大,会导致性能下降
栈区:局部变量,函数的形式参数,函数调用;
堆区:动态内存分配malloc/free,realloc,calloc;
静态区:全局变量,静态变量。
栈特点:先进后出,后进的先出。
插入一个元素叫压栈,删除一个元素叫出栈。