C语言进阶之旅(9)新老朋友结构体

文章目录

  • 思维导图
  • 结构体
    • 用处
    • 写法
  • 写一个人
  • 结构体传参
  • 拓展
  • 总结

思维导图

C语言进阶之旅(9)新老朋友结构体_第1张图片

结构体

用处

  • 形容一个复杂对象
  • 类似数组又不同
  • 类似:元素的集合
  • 不同:(数组存的是同类型变量)(结构体存的是不同类型变量)

写法

  • 类型
  • 花括号后面一定要加分号,语法规定,你不写会语法报错
struct stu 
{
     
//成员变量
};

  • 需要用的时候
  • 和int 创建变量一样
  • 拿起来定义即可
  • 对象
    (1)局部创建对象
  • 就是你有一个玩具他只属于你,只有你可以玩
int main()
{
     
int a;//同理
struct stu s;//对象
}

(2)全局对象

  • 这个玩具,我可以玩,你可以玩张三也可以玩,大家都可以玩
struct stu 
{
     
//成员变量
}su1,su2;//全局的

写一个人

例子:形容一个学生

  • 学生不可能被一种变量就给形容出来
  • 比如名字
  • 身份证
  • 体重
  • 身高
  • 就这些例子吧

  • 先在上面定义好变量
  • 然后下面创建对象,然后初始化
  • 在打印
  • 类似盖房子,想有图纸,然后找地,然后按照图纸改
  • . - >访问结构体成员操作符
  • .(变量.成员)
  • ->(指针->成员)
struct exte
{
     
	float wight;
	float hight;
};
struct stu//类型和int一样
{
     
	struct exte e;
	int age;
	char name[10];
	char  id[20];



};

int main()
{
     
	struct stu s = {
      {
     135.6,180.2},18,"张三","11223344556677x" };
	struct stu* ps = &s;
	//变量.类型就可以
	printf("%f %f %d %s %s\n",s.e.hight,s.e.wight,s.age,s.name,s.id);

在这里插入图片描述
打印还有另一种方式用指针

  • 我就打印身高体重
//指针指向这个结构体.找到里面的内容
printf("%f %f", ps->e.hight, ps->e.wight)

在这里插入图片描述

结构体传参

  • 用函数打印结构体
    (1)传值调用
void print(struct stu t)
{
     
	printf("%f %f %d %s %s\n", t.e.hight,t.e.wight,t.age,t.name,t.id);
}
struct exte
{
     
	float wight;
	float hight;
};
struct stu//类型和int一样
{
     
	struct exte e;
	int age;
	char name[10];
	char  id[20];



};

int main()
{
     
	struct stu s = {
      {
     135.6,180.2},18,"张三","11223344556677x" };
	struct stu* ps = &s;
	print(s);
}

(2)传指调用

void print(struct stu * t)
{
     
	printf("%f %f %d %s %s\n", t->e.hight, t->e.wight, t->age, t->name, t->id);
}

他怎么传参的呢??在看个例子

void add(int a ,int b)
{
     
int z =a+b;
return z;
}
int main()
{
     
int a =10;
int b =20;
add(a,b);
}
  • 函数传参数是从右向左,从外到内
  • 图解
    (1)

程序开始,main函数在栈区申请了一块空间,然后放入a和b

C语言进阶之旅(9)新老朋友结构体_第2张图片
(2)
传参
C语言进阶之旅(9)新老朋友结构体_第3张图片

(3)
add函数
C语言进阶之旅(9)新老朋友结构体_第4张图片
(4)释放
C语言进阶之旅(9)新老朋友结构体_第5张图片

  • 这里可以看出来传值过去要临时拷贝一份,效率慢(结构体中变量超多)

这里俩种写法那个好??
我觉的各化
1:效率慢,不可以改变安全
2:效率快,不安全
这个就看你使用场景了

拓展

  • %d(打印整型型)
  • %c(打印一个字符)
  • %s(打印字符串)
  • %u(打印无符整型)
  • %p(打印地址)
  • %f(打印单精度符点型)
  • %lf(双精度浮点型)
  • %.1f(精确到小数后面几位)
    %.1fd的运行结果
    在这里插入图片描述

总结

  • 加油
  • 最近状态调整回来了哈哈
  • 继续一步一个脚印前进

本篇文要是那里有错,请大胆指出(评论区或加我QQ(1696912943,给我留面哈哈哈)),博主,钱包不厚,不过脸皮厚,所以不会伤到博主自尊心,你提出错误,博主就涨知识,涨知识钱包就变厚哈哈哈哈

持续跟新中……………………

你可能感兴趣的:(c语言)