【C语言】入门——结构体

news/2024/7/24 0:51:35 标签: c语言, 数据结构, 开发语言, 程序人生

目录

结构体

为什么有结构体?

1.结构体的声明 

1.2结构体变量的访问和初始化 

2.结构体成员的访问


结构体

struct 结构体类型
{
 //相关属性;
}结构体变量;

结构体和数组不同,同一类型的数据的集合是数组;

            结构体是多种类型的数据的集合;

为什么有结构体?

在平常生活中,我们记录一个一个学生的信息,往往是每人一张信息卡,这里面记录了名字,身高等信息,这些不是简单的整型,数组就能解决的。像这种卡片形式的数据结构是通过结构体(struct)实现的。

1.结构体的声明 

struct Stu
{
    //定义学生相关属性
    char name[0];
    int age;
}s3,s4;
//s3,s4,是结构体类型Stu的变量名字
// s3,s4是全局变量

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

1.2结构体变量的访问和初始化 

struct str
{
 int x;
 int y;
}s1;                 //声明类型的同时定义变量s1
struct str s2;     //定义结构体变量s2

同样可以对其赋值,采用{}的形式

struct str
{
	int age;
    char name[20];
};
struct str s1 = {18,"zhangsan"};

struct student
{
    int num;
    char name[10];
};
int main()
{
    struct student s1;
    struct student s2;
    return 0;
}

总结:

👍结构体类型定义的末尾必须有分号;

👍成员类型可以是除本身所属结构体类型外的任何已有数据类型

👍在同一作用域内,结构体类型名不能与其他变量名或结构体类型名重名;

👍结构体类型的作用域与普通变量的作用域相同:在函数内定义,则仅在函数内部起作用;在函数外定义,则有全局作用;

2.结构体成员的访问

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

struct student
{
	int age;
	char name[20];
	int score;
}stu1 = {20,"zhangsan",60};
 
int main()
{
	printf("%s %d", stu1.name, stu1.age);
	return 0;
}

 有时候我们得到的不是一个结构体变量,而是一个结构体的指针

struct Stu
{
 char name[20];
 int age;
};
void print(struct Stu* ps)
{
 printf("name = %s   age = %d\n", (*ps).name, (*ps).age);
        //使用结构体指针访问指向对象的成员
 printf("name = %s   age = %d\n", ps->name, ps->age);
}
int main()
{
    struct Stu s = {"zhangsan", 20};
    print(&s);            //结构体地址传参
    return 0;
}

总结:

函数传参的时候,形参是实参的一份拷贝,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的 下降。

结构体传参的时候,要传结构体的地址。

以上是简单的对C语言中结构体的介绍,不足之处还望指点。 

 


http://www.niftyadmin.cn/n/5012454.html

相关文章

【备忘】清理Office缓存

【背景】电脑安装了M365 Apps for enterprise的客户端,遇到不常见的奇怪问题。尝试看清理缓存是否可以解决。 【清理步骤】 1. 关闭所有Office365 应用; 2. 搜索 %AppData% ,并打开该文件夹; 3. 进到 AppData > Local > M…

【Android知识笔记】UI体系(三)

View动画原理 当我们创建View动画时,一般使用类似如下代码: ScaleAnimation scaleAnimation = new ScaleAnimation(0,1,0,1); scaleAnimation.setDuration(3000); scaleAnimation.setFillAfter

后端返回parentId,前端处理成children嵌套数据

rouyi 的 vuetree函数结合elementui el-table组件使用 把有parentId和id结构的数据处理成children嵌套数据,字段名称不一致,可以设置。 vuetree函数: /*** 构造树型结构数据* param {*} data 数据源* param {*} id id字段 默认 id* param…

如何防止网络安全攻击

为了防止网络安全攻击,以下是一些常见的防御措施和建议: 使用强密码:确保使用足够长、复杂且随机的密码,并定期更改密码。不要在多个账户中重复使用相同的密码。 更新和修补软件:定期更新操作系统、应用程序和安全补丁…

文件导入之Validation校验List对象数组

背景: 我们的接口是一个List对象,对象里面的数据基本都有一些基础数据校验的注解,我们怎么样才能校验这些基础规则呢? 我们在导入excel文件进行数据录入的时候,数据录入也有基础的校验规则,这个时候我们又…

vite+vue 项目使用 electron

创建 vitevue 项目 npm create viteElectron 官方文档 electron 安装 安装 electron npm install --save-dev electron新建 electron 的入口文件,我这里在根目录新建 electron 文件夹,然后新建main.js和preload.js文件 根据官网说明,将以下…

sql server 分区表

分区表 分区表是在SQL Server 2005之后的版本引入的特性,这个特性允许把逻辑上的一个表在物理上分为很多部分。换句话说,分区表从物理上看是将一个大表分成几个小表,但是从逻辑上看,还是一个大表。 步骤 创建分表区的步骤分为…

【autodl/linux配环境心得:conda/本地配cuda,cudnn及pytorch心得】-未完成

linux配环境心得:conda/本地配cuda,cudnn及pytorch心得 我们服务器遇到的大多数找不到包的问题一,服务器安装cuda和cudnn使用conda在线安装cuda和cudnn使用conda进行本地安装检查conda安装的cuda和cudnn本地直接安装cuda和cudnn方法一&#x…