【初阶C语言】初阶结构体详细讲解

这篇具有很好参考价值的文章主要介绍了【初阶C语言】初阶结构体详细讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【初阶C语言】初阶结构体详细讲解

1. 结构体的声明

1.1 结构的基础知识

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

1.2 结构的声明

1
struct Book
{
	char name[20];
	int price;
};

2
struct Book
{
	char name[20];
	int price;
}b3, b4, b5;

3
typedef struct Book
{
	char name[20];
	int price;
}Book;
Book b3;
Book b4;
typedef struct Node
{
	int data;
	struct Node* next;
}Node;

int main()
{
	struct Book b1;
	struct Book b2;
	Book b3;

	return 0;
}


struct Book
{
	char name[20];
	int price;
};

typedef struct Book Book;

例如描述一个学生:

typedef struct Stu
{
     char name[20];//名字
    int age;//年龄
    char sex[5];//性别
    char id[20];//学号
}Stu;//分号不能丢
struct Point
{
    int x;
    int y;
}p1; //声明类型的同时定义变量p1
struct Point p2; //定义结构体变量p2
//初始化:定义变量的同时赋初值。

1.3 结构成员的类型

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

struct S
{
	char c;
	char arr[10];
	int* p;
}s1, s2;

struct S s3;

struct B
{
	int a;
	struct S s;
	double d;
}sb1, sb2;

struct B sb3;

int main()
{
	struct S s4 = {'c', "zhangsan", NULL};

	int a = 10;
	struct B sb4 = { 100, {'q', "lisi", &a}, 3.14};

	return 0;
}

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 data;
	struct Point p;
	struct Node* next;
}n1 = { 10, {4,5}, NULL }; //结构体嵌套初始化
struct Node n2 = { 20, {5, 6}, NULL };//结构体嵌套初始化

2. 结构体成员的访问

结构体变量访问成员
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
我们如何访问s的成员?

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

结构体指针访问指向变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。
那该如何访问成员。
如下:

struct Book
{
	char name[20];
	int price;
};

void print(struct Book* p)
{
	printf("%s %d\n", p->name, p->price);
}

int main()
{
	struct Book b1 = {"我的C语言", 66};
	struct Book b2 = { .price = 80, .name = "我的C++"};
	//结构体变量.结构体成员
	printf("%s %d\n", b1.name, b1.price);
	printf("%s %d\n", b2.name, b2.price);
	//结构体指针->结构体成员
	//struct Book* p1 = &b1;
	print(&b1);
	return 0;
}

3. 结构体传参

struct S
{
	int arr[100];
	int n;
};

void print1(struct S ss)
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", ss.arr[i]);
	}
	printf("\n%d\n", ss.n);
}

void print2(struct S* ps)
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", ps->arr[i]);
	}
	printf("\n%d\n", ps->n);
}

int main()
{
	struct S s = { {1,2,3,4,5}, 100 };
	print1(s);
	print2(&s);

	return 0;
}

上面的 print1 和 print2 函数哪个好些?
答案是:首选print2函数。
原因:

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

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

如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞作为鼓励,并评论收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问,或给恒川的意见,欢迎评论区留言。文章来源地址https://www.toymoban.com/news/detail-411110.html

到了这里,关于【初阶C语言】初阶结构体详细讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构初阶】九、五种比较排序的讲解和实现(直接插入 \ 希尔 \ 直接选择 \ 堆 \ 冒泡 -- C语言)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】八、非线性表里的二叉树(二叉树的实现 -- C语言链式结构)-CSDN博客  ====

    2024年02月08日
    浏览(51)
  • 【C语言】自定义类型详细讲解(结构体、位段的简单到深入)

    目录 1.结构体的声明 1.1基础知识 1.2结构体的声明 1.3结构体的特殊声明  1.4结构体的自引用 1.5结构体变量的定义和初始化 1.6结构体内存对齐 那对齐这么浪费空间,为什么要对齐  1.7修改默认对齐数 1.8结构体传参 2.位段 2.1什么是位段 2.2位段的内存分配 深入研究VS环境下的位

    2023年04月21日
    浏览(42)
  • 数据结构排序——详细讲解归并排序(c语言实现递归及非递归)

    上次是快排和冒泡:数据结构排序——详解快排及其优化和冒泡排序(c语言实现、附有图片与动图示意) 今天为大家带来归并排序 归并排序是一种分治算法,它将序列分成两个子序列,分别对 子序列进行排序 ,然后将排序好的子序列 合并起来 。这个过程可以 递归 地进行,

    2024年01月22日
    浏览(67)
  • 【数据结构初阶】一. 复杂度讲解

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 学C的第三十四天【程序环境和预处理】_高高的胖子的博客-CSDN博客  ===============================

    2024年02月10日
    浏览(44)
  • 【C语言】初阶测试 (带讲解)

      目录 ① 选择题         1. 下列程序执行后,输出的结果为( ) 2. 以下程序的输出结果是?  3. 下面的代码段中,执行之后 i 和 j 的值是什么()  4. 以下程序的k最终值是: 5. 以下程序的最终的输出结果为: 6. 下列描述中正确的是()  7.C 语言规定,在一个源程序中,

    2024年02月09日
    浏览(35)
  • 【C语言13】结构体的声明,定义与结构体的内存对齐

    通俗的说,结构体就是一个类的集合,如同整形数组是整形数字的集合体,结构体也是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 如果我们要表达一本书,那么这本书的元素有什么呢,书的名字,书的作者,书的创作日期~,而c语言中内置

    2024年02月13日
    浏览(72)
  • 初阶C语言-结构体

    🌞 “少年有梦不至于心动,更要付诸行动。” 今天我们一起学习一下结构体的相关内容! 📖 结构 是一些值的集合,这些值称为 成员变量 ,结构的每个成员可以是不同类型的变量。 📝为什么会出现结构体呢?在我们当前的一些学习中,我们学过的类型都是内置类型,例

    2024年02月11日
    浏览(36)
  • 结构体-C语言(初阶)

    目录 一、结构体声明         1.1 结构概念         1.2 结构声明         1.3 结构成员的类型         1.4  结构体变量的定义和初始化 二、结构体成员的访问         2.1 结构体变量访问成员         2.2 结构体指针访问指向变量的成员 三、结构体传参         结构

    2024年02月10日
    浏览(33)
  • 初阶C语言——结构体

    Hello,我们又见面了,我们的初阶C语言也将要结束,今天讲的是结构体,那我们开始今天的学习。 结构体的声明 1.1 结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成原可以是不同类型的变量 1.2 结构的声明 下面我们写代码来举例子吧 我们现在写一

    2024年02月16日
    浏览(35)
  • C语言——结构体初阶

      哈喽,大家好,今天我们来学习C语言中的结构体,今天主要学习初阶结构体,后期我们将继续学习结构体进阶。 目录 1.结构体类型的声明 1.1 结构体的基础知识 1.2 结构的声明  1.3 结构成员的类型 1.4 结构体变量的定义和初始化 2. 结构体成员的访问 3.结构体传参 结构是一

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包