C语言进阶之旅新老朋友结构体
Posted 一个正直的男孩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言进阶之旅新老朋友结构体相关的知识,希望对你有一定的参考价值。
思维导图
结构体
用处
- 形容一个复杂对象
- 类似数组又不同
- 类似:元素的集合
- 不同:(数组存的是同类型变量)(结构体存的是不同类型变量)
写法
- 类型
- 花括号后面一定要加分号,语法规定,你不写会语法报错
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
(2)
传参
(3)
add函数
(4)释放
- 这里可以看出来传值过去要临时拷贝一份,效率慢(结构体中变量超多)
这里俩种写法那个好??
我觉的各化
1:效率慢,不可以改变安全
2:效率快,不安全
这个就看你使用场景了
拓展
- %d(打印整型型)
- %c(打印一个字符)
- %s(打印字符串)
- %u(打印无符整型)
- %p(打印地址)
- %f(打印单精度符点型)
- %lf(双精度浮点型)
- %.1f(精确到小数后面几位)
%.1fd的运行结果
总结
- 加油
- 最近状态调整回来了哈哈
- 继续一步一个脚印前进
本篇文要是那里有错,请大胆指出(评论区或加我QQ(1696912943,给我留面哈哈哈)),博主,钱包不厚,不过脸皮厚,所以不会伤到博主自尊心,你提出错误,博主就涨知识,涨知识钱包就变厚哈哈哈哈
持续跟新中……………………
以上是关于C语言进阶之旅新老朋友结构体的主要内容,如果未能解决你的问题,请参考以下文章
我的C/C++语言学习进阶之旅JNI开发之转换C层返回的结构体为Java实体Bean
我的C/C++语言学习进阶之旅JNI开发之转换C层返回的结构体为Java实体Bean
我的C/C++语言学习进阶之旅JNI开发之转换C层返回的结构体为Java实体Bean
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段