首页 > 其他分享 >结构体(初阶)

结构体(初阶)

时间:2024-12-26 17:29:19浏览次数:4  
标签:初阶 struct int age 结构 成员 name

结构体:

· 结构体类型的声明

· 结构体初始化

· 结构成员访问

· 结构体传参

1.结构体的声明

 1.1结构的基础知识

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

 1.2结构的声明

struct tag
{
    member - list;
}variable-list;
例如一个学生:
typedef struct Stu
{
    char name[20];//名字
    int age;//年龄
    char sex[5];//性别
    char id[20];//学号
}Stu;//分号不能丢

1.3结构成员的类型

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

1.4结构体变量的定义和初始化

有了结构体类型,那如何定义变量,其实很简单。

struct Point
{
	int x;
	int y;
}p1;   //声明类型的同时定义变量p1

struct Point p2;//定义结构体变量p2

//初始化:定于变量的同时赋初值
struct Point p3 = { x,y };

struct Stu    //类型声明
{
	char name[15];//名字
	int age;   //年龄
};
struct Stu s = { "zhangsan",20 };//初始化

struct Node
{
	int date;
	struct Point p;
	struct Node* next;
}n1 = { 10,{4,5},NULL };  //结构体嵌套初始化
struct Node n2 = { 20,{5,6},NULL };//结构体嵌套初始化

2.结构成员的访问

· 结合体变量访问成员

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

例如:

我们可以看到s有结构成员name和age;

那我们如何访问s的成员呢?

struct S s;
strcpy(s.name, "zhangsan");//引用.访问name成员
s.age = 20;//使用.访问age成员

· 结构体指访问指向变量的成员

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

那该如何访问成员

如下:

#include<stdio.h>

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;
}

3.结构体传参

直接上代码:

#include<stdio.h>

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;
}

上面的print1和print2函数哪个好一些?

答案是:首选print2函数

原因:

函数传参的时候,参数是要压栈的。

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

结论:结构体指针传参的时候,要传结构体指针。

标签:初阶,struct,int,age,结构,成员,name
From: https://blog.csdn.net/a12sj_/article/details/144748012

相关文章

  • 基本数据结构——算法学习(三)上
    数据结构——算法学习(三)上前言数据结构是计算机科学的基石,几乎所有的软件开发、算法设计都离不开对数据的组织与管理。它不仅是程序高效运行的保障,也是解决复杂问题的关键工具。学习数据结构的过程,不仅仅是掌握具体的知识点,更是培养逻辑思维能力和问题解决能力的重要途径。在......
  • 栈,数据结构中的栈(C语言实现,新手必看)
    对于逻辑关系为“一对一”的数据,除了用顺序表和链表存储外,还可以用栈结构存储。栈是一种“特殊”的线性存储结构,它的特殊之处体现在以下两个地方:1、元素进栈和出栈的操作只能从一端完成,另一端是封闭的,如下图所示:通常,我们将元素进栈的过程简称为“入栈”、“进栈”或者“压......
  • 数据结构-栈和队列
    栈栈是一种后进先出(LIFO)的数据结构,就像一个只允许在一端进出的管道,最后进入栈的元素最先被取出,操作主要在栈顶进行,有入栈和出栈两种操作。例如,把盘子一个个往上叠放,取盘子时从最上面开始拿,这体现了栈的特点。相关代码实现创建入栈 出栈 遍历 判空 清栈 获......
  • LangGraph:基于图结构的大模型智能体开发框架
    LangGraph是LangChainAI开发的一个工具库,用于创建代理和多代理智能体工作流。它提供了以下核心优势:周期、可控性和持久性,对于Agent智能体开发者来说无疑减少了许多工作量。以下篇幅仅从本人角度阐述LangGraph在开发过程中的亮点以及使用方法。基本介绍LangGraph的StateGraph是......
  • 大二上 数据结构与算法 课堂模板算法 20241225
    数据结构与算法1-基本数据结构2-分治策略3-堆4-排序5-选择&树6-搜索树&散列表&并查集6.1-搜索树6.2-散列表6.3-并查集intfind(intx){if(pre[x]==x)returnx;returnpre[x]=find(pre[x]);}voidjoin(intx,inty){intfx=find(x)......
  • java哈希存储--数据结构
    前言前面学习过的数组存储和链式存储都有一定的缺点,哈希存储结合了二者的优点。本文源代码网址:https://gitee.com/zfranklin/java/tree/master/dataStructure/src/com/njupt/hashhttps://gitee.com/zfranklin/java/tree/master/dataStructure/src/com/njupt/hash哈希......
  • 数据结构之线性表之顺序表
    定义:由n(n>=0)个数据特性相同的元素构成的有限序列称为线性表简单来说n个相同数据类型的数据组wsw合在一起的这么一个集合就是一个线性表线性表包括顺序表和链表1.顺序表(我们所有的代码实现都用函数来封装)(1)顺序表初始化代码实现:(2)顺序表在尾部增加元素:(3)遍历顺序表:(4)......
  • 稀疏矩阵数据结构(如CSR、CSC格式)
    稀疏矩阵数据结构稀疏矩阵(SparseMatrix)是一种大多数元素为零的矩阵。在处理稀疏矩阵时,如果我们直接使用常规的二维数组来存储矩阵数据,将会浪费大量的存储空间,因为大部分元素都是零。为了解决这一问题,稀疏矩阵数据结构应运而生,通过只存储非零元素来大幅减少内存消耗。最常用的稀......
  • 「数据结构课程设计」二叉排序树与文件操作
    功能要求:(1)从键盘输入一组学生记录建立二叉排序树;(2)中序遍历二叉排序树;(3)求二叉排序树深度;(4)求二叉排序树的所有节点数和叶子节点数;(5)向二叉排序树插入一条学生记录;(6)从二叉排序树中删除一条学生记录;(7)从二叉排序树中查询一条学生记录;(8)以广义表的形式输出二叉排序树该文件也......
  • 基于Cecil源码的IL练级攻略(2)Metadata存储结构
    目录简介什么是元数据MetadataHeader参考文献简介上文提到CLRRuntimeHeader中包含metadatadirectory,我们可以通过这个字段访问对应的元数据信息。本篇文章会大致介绍一下元数据metadata以及它的存储结构。后续的文章都将基于本篇文章,因此如果有不理解的地方,推荐重新再看一......