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

发布于:2023-01-04 ⋅ 阅读:(279) ⋅ 点赞:(0)


前言

之前的数据都是单一的数据,如果某个数据节点包含很多个类型,比如学生信息,包含 名字(字符串),就很难表示
如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));
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到