首页 > 其他分享 >结构体

结构体

时间:2023-05-28 17:06:48浏览次数:25  
标签:struct int s2 s1 stu student 结构

一、结构体类型的声明

下面声明两个结构体,一个为学生结构体student,一个为成绩单结构体transcript。transcript为student的成员之一。

 struct称为“结构体关键字” ,student称为“结构体标签“,将二者合并struct student称为”结构体类型“,级别等同于int char等类型名

student里的name,age,grade叫做结构体的“成员”或“成员变量”


struct transcript {
	short math;
	short English;
	short physics;
};
struct student {
	char name[20];
	short age;
	struct transcript grade;
};
int main() {

	return 0;
}

二、typedef重命名结构体

typedef为类型定义函数,可以把上述类型struct student 重命名为stu,以达到简化效果。

typedef struct transcript {
	short math;
	short English;
	short physics;
}trs;
typedef struct student {
	char name[20];
	short age;
	trs grade;
}stu;
int main() {

	return 0;
}

三、结构体初始化

创建“结构体变量”s1,s2,进行初始化

int main() {
	stu s1 = { "张三",20,{97,88,75} };
	stu s2= { "李四",19,{92,73,67} };
	return 0;
}


四、结构体成员访问

有两种访问方式

(1)直接用  .   来访问

int main() {
	stu s1 = { "张三",20,{97,88,75} };
	stu s2= { "李四",19,{92,73,67} };
	printf("%s ", s1.name);
	printf("%d ", s2.age);
	printf("%d ", s1.grade.math);
	return 0;
}

(2)通过创建结构体指针,用  ->  访问

int main() {
	stu s1 = { "张三",20,{97,88,75} };
	stu s2= { "李四",19,{92,73,67} };
	stu* p_s1 = &s1;
	stu* p_s2 = &s2;
	printf("%s ", p_s1->name);
	printf("%d ", p_s2->age);
	printf("%d ", p_s1->grade.math);
	return 0;
}

五、结构体传参即压栈简介

两种传参方式

(1)直接传整个结构体

void test(stu s1,stu s2) {};
int main() {
	stu s1 = { "张三",20,{97,88,75} };
	stu s2= { "李四",19,{92,73,67} };
	test(s1, s2);
	return 0;
}

(2)传递结构体指针

void test(stu* p_s1,stu* p_s2) {};
int main() {
	stu s1 = { "张三",20,{97,88,75} };
	stu s2= { "李四",19,{92,73,67} };
	stu* p_s1 = &s1;
	stu* p_s2 = &s2;
	test(p_s1, p_s2);
	return 0;
}

应优先选用指针传参

原因:函数传参时,参数在栈区进行压栈存储,直接传整个结构体,参数太多,存取时对系统开销较大,会导致性能下降。

结构体_压栈


标签:struct,int,s2,s1,stu,student,结构
From: https://blog.51cto.com/u_16102535/6365352

相关文章

  • 数据库 建库建表 查看表结构 sql
    --sql结构化查询语言操作数据库的--注释--空格--创建数据库createdatabaseitquanmingxing;--创建数据库的时候设置编码createdatabaseitquanmingxing2CHARACTERsetutf8;--删除数据库dropdatabaseitquanmingxing;--删除数据库前先判断数据库是......
  • 数据结构之队列
    @TOC前言本文章讲述的是数据结构的特殊线性表——队列一.什么是队列,队列的特点队列是数据结构中的一种特殊的线性表,它与栈不同,队列的基本图例如上图:显然,队列的特点就是:先进先出FirstInFirstOut那么我们使用什么样的方式来实现队列呢?基于队列的特点,使用链表而不是数组来实现队......
  • Golang GIN 接收结构体切片(前端对象数组)
    想接收前端这样的数据格式:【json数组】[{"password":"casso","mobile":"13456789999","nick_name":"go","icon":"地址"},{"passwor......
  • Linux—基础篇:目录结构
    1、基本介绍1、linux的文件系统是采用级层式的树状目录结构,在此结构的最上层是根目录“/”,然后在此目录下创建其他目录2、在Linux的世界里,一切皆文件!!!2、具体的目录结构不用背,知道即可2.1、/bin(常用)(/usr/bin、/usr/local/bin)是binary的缩写,这个目录存放着最经常使用的命令2.2、......
  • 循环结构
    1.while循环 基本语句:while(){}只要true,语句就会一直执行下去我们大多数情况是会让循环停下来的,我们需要一个让表达式失败的方法来结束循环。少部分情况需要循环一直执行,比如服务器的请求响应监听等循环条件一直为true就会造成死循环2.do......while循环基本语句:do{}whil......
  • 数据库系统结构
    数据指的是描述现实世界中事物和事件的符号化表现形式,可以是文字、数字、图像、视频等。数据库所管理的数据指的是按照某种数据模型结构化并存储在计算机系统中的数据。数据模型指的是描述数据与数据之间关系的一组概念,用于帮助人们理解和组织数据。数据模型可以分为逻辑模型和......
  • 实验6 结构体应用编程
    task1//打印不及格学生信息和所有学生信息程分别调用#include<stdio.h>#include<string.h>#defineN3typedefstructstudent{intid;charname[20];charsubject[20];doubleperf;//平时成绩doublemid;//期中成绩doublefinal;......
  • 实验6 结构体应用编程
    实验四#include<stdio.h>#include<string.h>#defineN100typedefstruct{charnum[100];ints1;ints2;doublesum;charlevel[10];}STU;intfun(STUa[],intn,STUh[]);intmain(){STUs[N]={{"GA......
  • 实验6 结构体应用编程
    1.task41//finish!2#include<stdio.h>3#include<string.h>4#include<stdlib.h>5#defineN10067typedefstruct{8charnum[10];//学号9ints1;//期末成绩10ints2;//平时成绩1......
  • Linux进程结构
    变量类型初始化/未初始化:是否赋值全局/局部:作用域位于全局还是代码块内静态/动态:由static声明ELF可执行文件存储结构代码区:存储的是操作码、操作对象和常量数据区:存储的是已经初始化的全局变量和已经初始化的静态变量BSS区:存储的是未初始化的全局变量和未初始化的......