加入CSDN是出于记录,希望有不足之处多加指正。
1、结构体概念:
由C语言提供的各种基本类型中自定义的数据类型,比如把整型、字符、浮点、长整型等等一些基本的数据类型打包成为一个新的数据类型,用来方便描述一类事务的通用属性。
- 结构体类型声明:声明结构体一般写在头文件/文件头部,函数体外
struct //结构体标签
{
成员1;
成员2;
成员3;
......
};
#include <stdio.h>
// 结构体变量声明,不占用运行的内存空间
struct node
{
//char * name_ptr;
//char name_arr [32];
int num;
char ch;
};
int main(int argc, char const *argv[])
{
//定义结构体变量
struct node coke;
//给结构体成员赋值,称为成员应用符
coke.num = 100;
coke.ch = 'a';
//引用结构体成员
printf("num:%d\t ch:%d\n" , coke.num , coke.ch);
return 0;
}
2、结构体成员的初始化
//定义结构体变量,并初始化成员变量(普通初始化)
struct node coke = {199 , 'B'};
printf("num:%d\t ch:%c\n" , coke.num , coke.ch);
//定义结构体变量,并初始化成员变量(指定成员初始化)
struct node coke_1 = {
.num = 200,
.ch = 'k',
};
printf("num:%d\t ch:%c\n" , coke_1.num ,coke_1.ch );
注意:
使用方法,初始化当出现结构体成员变动/ 增加 /较少 /位置交换,都会导致初始化出现逻辑问题,所以推荐使用方法二,针对 某一个成员进行初始化,后期迭代更新不会影响数据内容。
3、普通结构体成员引用
结构体是多个基础数据类型的集合,需要通过该集合来引用 、获得其中某个成员进行赋值、取值等操作,就需要用到 .成员 引用符来访问。
结构体变量 .成员
coke.num = 200;
coke.ch = 'g';
4、结构体指针引用:
使用 -> 指针来引用结构体的成员
//结构体指针变量 -> 成员
struct node * coke;
coke->num = 200;
coke->ch = 'g';
//定义结构体指针变量
//struct node * coke_ptr = NULL;
//结构体指针的初始化
struct node * coke_ptr = malloc(sizeof (struct node));
coke_ptr -> num = 259; // 成员赋值
coke_ptr -> ch = 'k';
printf("num:%d\t ch:%c\n", coke_ptr -> num , coke_ptr->ch);
5、结构体变异
// 结构体变量声明,不占用运行的内存空间
struct node
{
int num;
char ch;
}Node , * Node_ptr; //在声明结构体变量类型的时候顺便定义了一个普通变量和一个指针变量
int main(int argc, char const * argv[])
{
Node.ch = 'F'; //不需要单独定义该变量
Node.Num = 1024;
Node_ptr = &Node; //不需要单独定义该指针变量
printf("ch:%c, Num:%d \n", Node.ch , Node.Num);
printf("ch:%c ,Num:%d \n", Node_ptr->ch , Node_ptr->Num);
return 0;
}
6、typedef 给变量取别名
//结构体变量声明,不占用运行的内存空间
typedef struct node //给结构体变量取别名
{
char * Name_ptr;
char Name_Arr [32];
int Num;
char ch;
}Node, *Node_ptr; //普通别名 Node ,指针别名Node_ptr
//struct node coke ; === Node coke;
//struct node * coke_p; ===Node_ptr coke_p;
int main(int argc, char const *argv[])
{
Node node; //Node 就是 struct node
Node_ptr node_p = &node; //Node_ptr 就是struct node *
node.ch = 'F';
node.Num = 1024;
printf("ch:%c , Num:%d \n" , node.ch , node.Num);
printf("ch:%c , Num:%d \n" , node_p->ch , node_p->Num );
return 0;
}