【C语言】结构

2023-09-15 10:24:07

结构类型

声明结构变量

struct data {
	//结构成员
		int month;
		int day;
		int year;
};
//或
struct point{
	int x;
	int y;
} p1,p2;
//只定义了两个变量
struct {
	int a;
	int b;
} s1,s2;

定义结构变量

	struct data today;
	//定义一个变量today,里面有month,year,day的值

结构计算

//数组不能做这种运算
	p1 = (struct point){5,10};//相当于p1.x=5,p1.y=10
	p1 = p2;//相当于p1.x=p2.x , p1.y=p2.y;

结构指针

struct data *pDate = &today
//和数组不同,结构变量的名字不是地址,必须用取地址符&

结构与函数

  • 整个结构可以作为参数传入函数
  • 此时在函数内部新建一个结构变量,并赋值调用者的结构的值
  • 函数也可以返回一个结构

输入结构

#include<stdio.h>
//声明结构
struct point {
	int x;
	int y;
};

//定义函数---输入结构
void getStruct(struct point);
//输出
void outputStruct(struct point);

int main(){
//	定义一个point类型的y变量
	struct point y ={0,0};
//	将y交给函数
	getStruct(y);
	outputStruct(y);
	
	return 0;
}

// C语言在函数调用的时候只是传值
void getStruct(struct point p){//接收到的不是y这个结构变量,而是y这个结构变量的值
// 此时是有一个和y的结构变量相同值的另一个结构变量
	scanf("%d",&p.x);
	scanf("%d",&p.y);
	printf("%d,%d\n",p.x,p.y);
}

void outputStruct(struct point p){
//	从始至终没有动main函数中的y
	printf("%d,%d\n",p.x,p.y);
}

解决方案:

struct point inputPoint(){
// 创建一个临时结构变量
	struct point temp;
	scanf("%d\t",&temp.x);
	scanf("%d\t",&temp.y);
	return temp;
}


int main(){
	struct point y ={0,0};
	y = inputPoint();
	outputStruct(y);
	
	return 0;
}

指向结构的指针

  • ->表示指针所指的结构变量中的成员
(*p).month = 12
p->month = 12

结构中的结构

  • 结构内可以定义另一个结构当变量
  • 结构变量可以是数组
struct time {
	int hour;
	int minute;
	int second;
};

struct time testTimes[5] = {
	{11,25,36},{12,0,0},{52,56,25}	
};
//testTimes[0].hour=11,testTimes[0].minute=25,testTimes[0].second=36

以下四种形式等价:

struct read r,*rp;
rp = &r;

r.ptl1.x
rp->ptl1.x

在这里插入图片描述

更多推荐

1.9python基础语法——运算符

1)算数运算符运算符描述实例+加1+1输出结果为2-减1-1输出结果为0*乘2*2输出结果为4/除10/2输出结果为5//整除9//4输出结果为2%取余9%4输出结果为1**指数2***4输出结果为16,即2*222()小括号小括号用来提高运算优先级,即(1+2)*3输出结果为9注意:混合运算优先级顺序:()高于**高

Laravel5使用box/spout扩展,大文件导出CSV文件

一、背景早期开发的系统,使用laravel框架,版本V5.4,项目经理导出3年的数据,由于数据量较大,浏览器卡死。一次性无法导出,某位程序员告知按月去导出,之后在拼凑,这。。搁谁受的了,我担心投诉,加个班优化下。二、优化方案导出数据的Sql,对应创建索引,提高查询速度查询结果集使用chunk()方法拆分较小集合使用bo

Hive 的权限管理

目录​编辑一、Hive权限简介1.1hive中的用户与组1.1.1用户1.1.2组1.1.3角色1.2使用场景1.2.1hivecli1.2.2hiveserver21.2.3hcatalogapi1.3权限模型1.3.1StorageBasedAuthorizationintheMetastoreServer1.3.

竞赛选题 基于机器视觉的火车票识别系统

文章目录0前言1课题意义课题难点:2实现方法2.1图像预处理2.2字符分割2.3字符识别部分实现代码3实现效果最后0前言🔥优质竞赛项目系列,今天要分享的是基于机器视觉的火车票识别系统该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!🧿更多资料,项目分享:https://gitee.com/dancheng-sen

MySQL数据库查缺补漏——基础篇

MySQL数据库查缺补漏-基础篇基础篇netstartmysql80[服务名]netstopmysql80createdatabasepshdhxdefaultcharsetutf8mb4;为什么不使用utf8?因为其字符占用三个字节,有四个字节的字符,所有需要设置为utf8mb4;数值类型:字符串类型:日期类型:用户

汽车自适应巡航系统车距控制策略研究

摘要:由于汽车自适应巡航控制系统的非线性和不确定性等问题,传统的非线性系统等效线性化方法难以满足系统的精度、稳定度和快速性的要求,因此提出了一种基于模糊控制理论的自适应巡航控制器的设计方法。通过对汽车距离差和相对速度的计算和推理,实时调整本车加速度,保证本车能够在一定的安全车距下跟随前车。通过在Matlab/Simul

虹科案例 | LIN/CAN总线汽车零部件测试方案

文章来源:虹科汽车电子点此阅读原文虹科的LIN/CAN总线汽车零部件测试方案是一款优秀的集成套装,基于Baby-LIN系列产品,帮助客户高效完成在测试、生产阶段车辆零部件质量、功能、控制等方面的检测工作。1、汽车零部件测试的重要性?汽车零部件的测试对于确保汽车的安全性、功能性和可靠性起着至关重要的作用。LIN/CAN通

驱动开发DAY4

驱动代码#include<linux/init.h>#include<linux/module.h>#include<linux/cdev.h>#include<linux/fs.h>#include<linux/device.h>#include<linux/uaccess.h>#include<linux/slab

【Pytest实战】Pytest+Allure+Jenkins自动化测试框架搭建

😄作者简介:小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊座右铭:不想当开发的测试,不是一个好测试✌️。如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍之前分享过Pytest基础知识,可参考Pytest实战专栏

创建Scrapy项目

创建Scrapy项目的步骤如下:安装Scrapy:在终端或命令提示符中运行以下命令来安装Scrapy:pipinstallscrapy创建Scrapy项目:在终端或命令提示符中,使用以下命令创建一个新的Scrapy项目:scrapystartproject<project_name>其中,<project_name>是

【详细教程hexo博客搭建】1、从零开始搭建一个能用的博客

1、开始2.环境与工具准备本教程主要面对的是Windows用户操作系统:Windows10NodeGitHexo文本编辑器(强烈推荐VSCODE)GitHub帐号一个域名(强烈推荐买个域名)云服务器(可选)3.Node的安装打开Node官网,下载和自己系统相配的Node的安装程序,否则会出现安装问题。下载地址:Down

热文推荐