您的位置:首页 > 其它

初始结构体 基础相关知识

2021-05-15 21:24 645 查看

初始结构体 基础相关知识

结构的声明

列如:

//struct - 结构体关键字 Stu - 结构体标签 struct Stu - 结构体类型 
struct Stu
{
//成员变量 
char name[20];
short age;
char tele[12];
char sex[5];
} s1,s2,s3; //分号不能丢 s1,s2,s3是三个全局的结构体变量
//尽量少使用全局变量 
int main()
{
struct Stu s; // struct Stu - 是类型 ,s - 是变量 
return 0;
  }


typedef的用法

typedef struct Stu //typedef 类型重命名 
{
//成员变量 
char name[20];
short age;
char tele[12];
char sex[5];
}Stu; //类型 
int main()
{
Stu s1 = {"张三", 20, "183289432", "男"};//初始化 
struct Stu s2 = {"李四", 20, "183223432", "保密"}; // struct Stu - 是类型 ,s - 是局部变量

return 0;
  }

嵌套结构体

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 birt\n";
struct T t = {"hehe", {100,'w',"hello world",3.14},arr};
//用 . 来访问结构体成员 
printf("%s\n",t.ch); //打印hehe 
printf("%lf\n",t.s.d);//打印3.140000(小数点后默认六位) 
return 0;
}



结构体传参 :最好传结构体的地址

typedef struct Stu //typedef 类型重命名 
{
//成员变量 
char name[20];
short age;
char tele[12];
char sex[5];
}Stu; //类型 
void Print1(Stu tmp)
{
printf("name: %s\n",tmp.name);
printf("age: %d\n",tmp.age);
printf("tele: %s\n",tmp.tele);
printf("sex: %s\n",tmp.sex);
}
void Print2(Stu* ps)
{
printf("name: %s\n",ps->name);
printf("age: %d\n",ps->age);
printf("tele: %s\n",ps->tele);
printf("sex: %s\n",ps->sex);
}
int main()
{
Stu s = {"张三", 20, "183289432", "男"};//初始化 
//打印结构体数据 
//两种打印情况对比
Print1(s);  //压栈的系统开销比较大 效率底 
Print2(&s); //只传一个地址系统开销比较小 效率高 
return 0;
  }


关于什么是压栈

涉及知识:

1.内存分为 三个空间:栈区、堆区、静态区 

2.栈区存放: 局部变量、函数的形式参数、函数调用也开辟空间

3.堆区存放: 动态内存分配、 malloc/free、realloc、calloc

4.静态区存放: 全局变量、静态变量 

数据结构

----线性数据结构

顺序表

链表

栈 :先进后出,后进的先出 

队列

----树形数据结构

二叉树

----图 

int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int a = 10;
int b = 20;
int ret = 0;
//插入一个元素:压栈
//删除一个元素:出栈 
ret = Add(a,b); //传过去的a,b, 就叫压栈操作
return 0;
 }





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: