栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言结构体(`struct`)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言结构体(`struct`)

结构体
  • 结构体
  • 结构体类型的声明
        • 结构体创建图解:二种方法
  • 结构体初始化
        • 结构体的初始化有三种:
  • 结构体成员访问
  • 结构体传参

结构体

结构体是指:
不同类型值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量

结构体和其他类型基础数据类型一样,例如int类型,char类型只不过结构体可以自定义数据类型
进行复杂对象的描述就会使用到结构体

例如:
一个学生的信息就需要学号(字符串),姓名(字符串),年龄(整形),电话号码(int)等等
这些数据类型都不同但是他们又是表示一个整体,结构体就可以将不同类型的数据存放在一起,当做一个整体进行使用,也可以进行封装再次利用

结构体类型的声明

结构体声明的语法形式:

struct book
{
   char a;
   char b;  成员列表
   int c;
};
这里struct 是一个结构体关键字
book 是结构体标签,可以更改

结构的成员可以是标量、数组、指针,甚至是其他结构体

结构体创建图解:二种方法

结构体初始化

结构体初始化在对结构体变量初始化时,要对结构体成员按照顺序一个一个赋值,不能跳过前面成员变量,而直接给后面成员赋初值,但是可以只赋值前面几个成员,对与后面的成员未赋值的变量,如果是数值型,则会自动赋值为0,对于字符型,会自动赋初值为NULL,即‘’

结构体的初始化有三种:
  1. 结构体变量创建时赋值

  2. 定义结构体时赋值

struct peo
{
	char name[20];  //名字
	char tele[12];  //电话
	char sex[5];    //性别
	int high;       //身高
}s = { "张三","14256715841","男",182 };
-----------------------------------------------
或者
struct peo
{
	char name[20];  //名字
	char tele[12];  //电话
	char sex[5];    //性别
	int high;       //身高
};
struct peo s = { "张三","14256715841","男",182 };

  1. 结构体的嵌套初始化
struct peo
{
	char name[20];  //名字
	char tele[12];  //电话
	char sex[5];    //性别
	int high;       //身高
};
struct st
{
	struct peo n;
	int num;
	float x;
};
int main()
{
	结构体变量的创建
	struct peo s = {"张三","14256715841","男",182};
	struct st y = { {"小红","15584288419","女",168},100,3.14 };
	输出
	printf("%s %s %s %dn", s.name, s.tele, s.sex, s.high);
	printf("%s %s %s %d %d %fn",y.n.name,y.n.tele,y.n.sex,y.n.high,y.num,y.x );
	return 0;
}
结构体成员访问

结构变量的成员是通过点操作符(.)访问的.·点操作符接受两个操作数

结构体传参

结构体传参有二种方法
1.形参
打印时用的是.操作符

struct peo
{
	char name[20];
	char srx[10];
	int tele[12];
};
print(struct peo str)
{
	printf("%s %s %dn", str.name, str.srx, str.tele);
}
int main()
{
	struct peo s = { "小明","男","15846092751" };
	print1(s);

}

2.实参以指针的方式
打印时用的是->操作符

struct peo
{
	char name[20];
	char srx[10];
	int tele[12];
};
print1(struct peo* str)
{
	printf("%s %s %dn", str->name, str->srx, str->tele);
}
int main()
{
	struct peo s = { "小明","男","15846092751" };
	print2(&s);
}

如果选择结构体传参时首选以指针的方式
因为如果选择以形参的函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的
下降。
总结:
结构体传参的时候,要传结构体的地址

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887614.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号