前言
之前的数据都是单一的数据,如果某个数据节点包含很多个类型,比如学生信息,包含 名字(字符串),就很难表示
如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));