熟悉c语言结构体
一. 结构体的声明
1. 基础知识
为什么会有结构体呢 有了int float这些类型的变量不就够了嘛?
我们说 要描述一个复杂对象的时候 光靠简单的int 和float是不能够准确描述的
例如学生 他要有名字 要有学号等等
1.2 结构体的声明
我们规定 结构体声明要满足以下格式
structtag{
member - list;}variable-list;
例如 我们使用结构体来描述一个学生
structstu{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号}stu;//分号不能丢//实际上上面一行的stu是一个全局变量 我们在使用结构体创建变量的时候一般要使用局部变量
1.3 结构成员的类型
结构的成员可以是标量 数组 指针 甚至是其他结构体。
1.4 结构体变量的定义和初始化
structPoint{int x;int y;}p1;structPoint p2;//定义结构体变量p2// 初始化 定义变量的同时赋值 structPoint p3 ={2,3};
定义初始化的三种方式
p1 p2 p3
structPoint{int x;int y;}p1;structPoint p2;//定义结构体变量p2// 初始化 定义变量的同时赋值 structPoint p3 ={2,3};structNode{int date;//整形structPoint p;//结构体类型structNode* next;//指针类型};structNode n1 ={2,{2,3},NULL};
放置结构体中的三种类型
二. 结构体成员的访问
1. 结构体变量访问成员
结构变量成员是通过点操作符来访问的。
点操作符接受两个操作数。 例如 :
structstu{char name[20];int age;};structstu s1={"xiaomengxin",18};intmain(){
s1.age =20;//使用.访问age}
那么同学们思考一下可不可以使用上面的操作来修改name呢?
答案是不可以
因为s1.name其实访问的是name这个数组的地址 地址是不能被修改的
那么我们要怎么修改呢 ?
还记不记得我们之前学过一个函数
strcpy()
structstu{char name[20];int age;};structstu s1={"xiaomengxin",18};intmain(){
s1.age =20;//使用.访问agestrcpy(s1.name,"9527");}
这样子就可以啦
2. 结构体指针访问成员的变量
structstu* p =&s1;(*p).age;(*p).name;
p->age;
p->name;
和结构体变量差不多
要注意的是多了一个可以用指针变量指向结构体成员的方法
三. 结构体传参
structS{int date[1000];int num;};structS s1 ={{1,2,3,4},5};voidprint1(structS s1){printf("%d\n", s1.num);}voidprint2(structS* p1){printf("%d\n", p1->num);}intmain(){print1(s1);print2(&s1);return0;}
上面的代码就能很好的说明问题
两种传参方式
传值调用和传址调用
我们这里推荐使用传址调用 至于原因呢 大家可以参考我写的这两篇博客
函数栈帧上
函数栈帧下
以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够
不吝赐教 在评论区或者私信指正 博主一定及时修正
那么大家下期再见咯
版权归原作者 xiaomengxing_ 所有, 如有侵权,请联系我们删除。