C语言简明清晰讲解结构体

 更新时间:2022年05月04日 16:46:05   作者:_雪菜肉丝面_  
C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。你可以认为结构体是一种聚合类型

本质

一些值的集合。

简单使用

#include <stdio.h>
struct User {
	char uName[20];
	char uPass[20];
};
int main() {
	struct User u1 = {
		"abc","123"
	};
	printf("%s\n", u1.uName);
	printf("%s\n", u1.uPass);
	return 0;
}

效果:

在这里插入图片描述

一些写法

声明之后,可以立即创建实例。

也可以单独声明。

#include <stdio.h>
struct User {
	char uName[20];
	char uPass[20];
} u1, u2, u3;
struct User u4;
int main() {
	struct User u5;
	return 0;
}

匿名结构体:我用了,你们别想再用。

struct {
	char uName[20];
	char uPass[20];
}x;

我套我自己

只能套指针,因为空间有限。

举例:链表。

#include <stdio.h>
struct Node {
	int val;
	struct Node* next;
};
int main() {
	struct Node a = { 333,NULL };
	struct Node b = { 666,&a };
	printf("%d\n", (*b.next).val);
	return 0;
}

效果:

在这里插入图片描述

内存对齐

结构体放成员,是一个一个放的。

第一个放到首个地址处。

第二个开始,计算一个对齐数,该数是以下两个值的较小者:

1,VS的默认值,8。

2,该成员所占字节数。

实际的偏移量是对齐数的整数倍。

最后,结构体的大小是最大对齐数的整数倍。

举例-int char char

#include <stdio.h>
struct A {
	int a;
	char b;
	char c;
};
int main() {
	struct A a = { 1,1,1 };
	printf("%lld", sizeof(a));
	return 0;
}

效果:8

在这里插入图片描述

图解:

int放在首位。

char占1字节,直接放。

第二个char也是。

最后长度,按int的字节数的整数倍,也就是8。

在这里插入图片描述

举例-char int char

#include <stdio.h>
struct A {
	char b;
	int a;
	char c;
};
int main() {
	struct A a = { 1,1,1 };
	printf("%lld", sizeof(a));
	return 0;
}

效果:12

在这里插入图片描述

图解:

char直接放。

int从第四个开始放。

char直接放。

最后长度:从9开始第一个4的倍数,12。

在这里插入图片描述

举例-char char int

#include <stdio.h>
struct A {
	char b;
	char c;
	int a;
};
int main() {
	struct A a = { 1,1,1 };
	printf("%lld", sizeof(a));
	return 0;
}

效果:8

在这里插入图片描述

图解:两个char直接放。

int从下一个4的整数倍,也就是第五个开始放。

最后长度:从8开始第一个4的倍数,8。

在这里插入图片描述

由结构体指针访问成员

就是一种箭头的写法。

#include <stdio.h>
struct A {
	int a;
};
int main() {
	struct A a = { 333 };
	struct A* b = &a;
	printf("%d\n", b->a);
	return 0;
}

效果:

在这里插入图片描述

到此这篇关于C语言简明清晰讲解结构体的文章就介绍到这了,更多相关C语言结构体内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现小小圣诞树源代码

    C语言实现小小圣诞树源代码

    圣诞节当然要有个圣诞树了,今天给你们用C语言编写一个雪夜圣诞树,这篇文章主要给大家介绍了关于C语言实现小小圣诞树的相关资料,需要的朋友可以参考下
    2023-12-12
  • C语言中字符串实现正序与逆序实例详解

    C语言中字符串实现正序与逆序实例详解

    这篇文章主要介绍了C语言中字符串实现倒叙实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • C语言实现顺序表的基本操作的示例详解

    C语言实现顺序表的基本操作的示例详解

    顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。本文将通过示例为大家讲解一下顺序表的基本操作,需要的可以参考一下
    2022-11-11
  • C++实现Window环境聊天室功能

    C++实现Window环境聊天室功能

    这篇文章主要为大家详细介绍了C++实现Window环境聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C语言创建和操作单链表数据结构的实例教程

    C语言创建和操作单链表数据结构的实例教程

    这篇文章主要介绍了C语言创建和操作单链表数据结构的实例教程,讲解使用C语言实现链表结构时指针的使用,需要的朋友可以参考下
    2016-04-04
  • 带头结点的链表的基本操作(超详细)

    带头结点的链表的基本操作(超详细)

    链表是一种动态分配空间的存储结构,能更有效地利用存储空间,通过对单链表基本操作的代码实现,我深刻领悟到以“指针”指示元素的后继,在插入或删除元素时不需要移动元素
    2023-07-07
  • C++ inline内联函数详解

    C++ inline内联函数详解

    这篇文章主要介绍了C++ inline内联函数详解,有感兴趣的同学可以借鉴参考下
    2021-02-02
  • C/CPP运算优先级的坑及解决

    C/CPP运算优先级的坑及解决

    这篇文章主要介绍了C/CPP运算优先级的坑及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • linux下c语言中隐藏进程命令行参数(例如输入密码等高危操作)

    linux下c语言中隐藏进程命令行参数(例如输入密码等高危操作)

    启动程序很多时候用命令行参数可以很方便,做到简化一些配置,但是输入用户名密码等操作,如果通过进程查看工具直接看到密码就太不安全了,这里就为大家分享一下方法
    2021-01-01
  • Qt中树形控件Tree Widget的使用方法汇总

    Qt中树形控件Tree Widget的使用方法汇总

    最近小编在研究Tree Widget树形控件的相关知识,这种控件其实有时还是很有用处的,我主要利用的是带有复选框的树形控件,下面通过实例代码给大家介绍下Qt中树形控件Tree Widget的一些使用方法,感兴趣的朋友一起学习吧
    2021-11-11

最新评论