0


熟悉c语言结构体

熟悉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;}

上面的代码就能很好的说明问题

两种传参方式

传值调用和传址调用

我们这里推荐使用传址调用 至于原因呢 大家可以参考我写的这两篇博客

函数栈帧上

函数栈帧下

以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够

不吝赐教 在评论区或者私信指正 博主一定及时修正

那么大家下期再见咯


本文转载自: https://blog.csdn.net/meihaoshy/article/details/126814809
版权归原作者 xiaomengxing_ 所有, 如有侵权,请联系我们删除。

“熟悉c语言结构体”的评论:

还没有评论