【C语言】数据类型之结构体

举报
人才程序员 发表于 2023/11/30 17:49:12 2023/11/30
【摘要】 @TOC 前言之前的数据都是单一的数据,如果某个数据节点包含很多个类型,比如学生信息,包含 名字(字符串),就很难表示如double b; char str[20];等等如何把这些数据组合构造一个类型:那就是结构体,即通过一个语法结构,将这 些数据类型包在一起,这样操作时就一块操作了,非常的方便提示:以下是本篇文章正文内容,下面案例可供参考 一、创建结构体与基本的使用创建:结构体的关键字为s...

@TOC


前言

之前的数据都是单一的数据,如果某个数据节点包含很多个类型,比如学生信息,包含 名字(字符串),就很难表示
如double b; char str[20];等等
如何把这些数据组合构造一个类型:那就是结构体,即通过一个语法结构,将这 些数据类型包在一起,这样操作时就一块操作了,非常的方便


提示:以下是本篇文章正文内容,下面案例可供参考

一、创建结构体与基本的使用

创建
结构体的关键字为struct

struct Node//struct 为关键字  Node 为名字
{
	int a;//结构体成员
	double b;
	char* c;
};//末尾加上分号

创建结构体变量
在创建一个结构体变量时,需要加上关键字

下面为使用方法及注释

struct Node no; //声明结构体变量,类型名固定 
struct Node nd = {23,88.5,"小明"}; //依次初始化给成员 
struct Node ne = {"小明"}; //初始化部分元素,其他为 0 
struct Node* np = &nd; //指针对象指向合法空间

这样就初始化完毕了。

赋值和使用
使用:
我们指定,我们可以创建堆空间的变量,也可以创建栈空间的变量,
在使用结构体的时候会区分它们的使用方式
例如:

nd.a;//栈
np->c;//堆

二、指针成员的使用

指针成员:必须指向合法空间。
初始化的两种方式:

struct no
{
	int *p;
};
struct no n = {malloc(4)};//使用malloc初始化
int a=10;
struct no nn = {&a};//使用另一个变量的地址,只要是合法的

释放:

free(n.p);

三、结构体成员与函数成员

结构体成员:
只有指针才能指向当前结构体.
可以随便指向其他的结构体

struct Node
{
	int a;
};

struct Node2
{
	struct Node2 *next;
	struct Node n;
	struct Node *no;
};

成员函数:
结构体内不能放函数,但是可以放函数指针

void fun()
{
	printf("i am fun\n");
}

struct Node
{
	void (*pfun)();
}

四、结构体的大小之谜(一)

我们以为的是结构体内的元素大小相加就是结构体大小,但是看↓

//no中有int、double、char[10]我们以为的大小为:18
//但实际却是:32  所以我们先使用sizeof()取得大小,原理以后再讲
printf("%d", sizeof(no));
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。