C语言——结构体(入门)
创始人
2024-02-26 05:55:24
0

文章目录

  • 1.结构体的声明
    • 1.1.结构体是什么?
    • 1.2.结构体的声明
    • 1.3.结构体的定义和初始化
  • 2.结构体成员的访问
  • 3.结构体传参

1.结构体的声明

1.1.结构体是什么?

在生活中往往很难用一个准确的数据类型来描述一个物体,例如一本书,描述它的书名、作者以及出版社,需要用字符型数组来表示。当描述它的价格时,需要整型变量来表示。所以需要定义一个结构体来修饰它,结构体是一些值的集合,这些值是结构体的成员变量。结构体的每个成员可以是不同类型的变量。

1.2.结构体的声明

结构体声明的语法如下

struct tag–结构体名称
{
mumber_list;–结构体成员
}variable_list;–结构体变量

struct stu
{char name[20];char gender[10];float score;
};//这里的分号不能忘

这里定义了一个结构体stu,成员有 char name[20];char gender[10];float score; 。

注意:
结构体的成员可以是变量、数组、指针,甚至可以是其他的结构体。

1.3.结构体的定义和初始化

struct stu
{char name[20];char gender[10];int age;float score;
}s0; //定义一个全局结构体变量s0int main()
{struct stu s1 = {"zhangsan", "male", 18, 99.5f};//定义一个局部结构体变量s1并初始化return 0;
}

下面我再举另一个例子

struct S
{int i;char c;
};struct S1
{float f;struct S s;//结构体内嵌套声明结构体变量double d;
};int main()
{struct S1 ss = { 3.14f,{18, 'c'}, 2.14};//嵌套定义并初始化结构体变量return 0;
}

2.结构体成员的访问

结构体成员的访问需要借助 “.” 成员访问操作符来进行访问。例如

#includestruct stu 
{char name[20];char gender[15];float score; 
};
int main()
{struct stu s1 = {"zhangsan", "male", 59.5f};printf("%s %s %f\n",s1.name, s1.gender, s1. score);return 0;
}

在这里插入图片描述
当指针访问结构体成员时,有时得到的并不是一个结构体变量,而是一个结构体指针。这时我们可以通过(->)操作符来进行访问

#includestruct stu 
{char name[20];char gender[15];float score; 
};void Print(struct stu* s1)
{printf("%s %s %f\n", s1->name, s1->gender, s1->score);
}int main()
{struct stu s1 = {"zhangsan", "male", 59.5f};Print(&s1);return 0;
}

在这里插入图片描述

3.结构体传参

struct S
{int data[1000];int num;
};
struct S s = {{1,2,3,4}, 1000};
//结构体传参
void print1(struct S s)
{printf("%d\n", s.num);
}
//结构体地址传参
void print2(struct S* ps)
{printf("%d\n", ps->num);
}
int main()
{print1(s);  //传结构体print2(&s); //传地址return 0;
}

在结构体传参中,如果使用传值调用的话,那么在创建数据压栈时,寄存器需要额外为结构体变量创建临时空间,程序性能会有所下降,如果使用创址调用,只需要通过指针对结构体变量进行操作,传参时可以大大减少寄存器的压力,这样可以使程序运行效率更高。

结论:在结构体传参时,尽量使用传址的方式进行传参。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...