C语言:结构体
时间:2021-07-14
本文章向大家介绍C语言:结构体,主要包括C语言:结构体使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这是很基础的教程,我只是写给自己看,作为一个学习笔记记录一下,如果正在阅读的你觉得简单,请不要批评,可以关掉选择离开
如何学好一门编程语言
- 掌握基础知识,为将来进一步学习打下良好的基础。
- 上机实践,通过大量的例题学习怎么设计算法,培养解题思路。
- 养成良好的编码习惯,注释一定要写,要不然保你一周后自己写的代码都不认识了。
C语言中的数组 定义为存储 相同类型的数据。
C语言中的结构 允许存储不同类型的数据,定义结构的语句为:
struct 结构体标签{ 变量定义; 变量定义; ... } 结构变量 列表;
举例
struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book;
在一般情况下,结构体标签、变量定义、结构体变量 这 3 部分至少要出现 2 个
//没有标明标签 struct { int a; char b; double c; } s1; //标签被命名为SIMPLE,没有声明变量 struct SIMPLE { int a; char b; double c; }; //用SIMPLE标签的结构体,另外声明了结构体变量t1、t2、t3 struct SIMPLE t1, t2[20], * t3; //用typedef创建新类型 typedef struct { int a; char b; double c; } Simple2; //现在可以用Simple2作为类型声明新的结构体变量 Simple2 u1, u2[20], * u3;
结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。
//此结构体的声明包含了其他的结构体 struct COMPLEX { char string[100]; struct SIMPLE a; }; //此结构体的声明包含了指向自己类型的指针 struct NODE { char string[100]; struct NODE *next_node; };
如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明,如下所示:
struct B; //对结构体B进行不完整声明 //结构体A中包含指向结构体B的指针 struct A { struct B *partner; //other members; }; //结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明 struct B { struct A *partner; //other members; };
结构体变量的初始化
和其它类型变量一样,对结构体变量可以在定义时指定初始值。
#include<stdio.h> struct Books{ char title[50]; char author[50]; char subject[100]; int book_id; } book = {"C语言","RUNOOB","编程语言",123456}; int main() { printf("title:%s\n author:%s\nsubject:%s\nbook_id:%d\n", book.title, book.author, book.subject, book.book_id); return 0; }
title:C语言 author:RUNOOB subject:编程语言 book_id:123456
访问结构成员使用 . 。例如:
结构体变量.成员名
结构作为函数参数
您可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。
#include <stdio.h> #include <string.h> // 声明结构体类型Books struct Books{ char title[50]; char author[50]; char subject[100]; int book_id; }; void printBook(struct Books book); /* 函数声明 */ int main(){ struct Books Book1; /* 声明 Book1,类型为 Books */ struct Books Book2; /* 声明 Book2,类型为 Books */ /* Book1 详述 */ strcpy(Book1.title, "C Programming"); strcpy(Book1.author, "Nuha Ali"); strcpy(Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; /* Book2 详述 */ strcpy(Book2.title, "Telecom Billing"); strcpy(Book2.author, "Zara Ali"); strcpy(Book2.subject, "Telecom Billing Tutorial"); Book2.book_id = 6495700; printBook(Book1); /* 将结构变量Book1 作为参数传入函数*/ printBook(Book2); /* 将结构变量Book2 作为参数传入函数 */ return 0; } void printBook(struct Books book){ printf("Book title : %s\n", book.title); printf("Book author : %s\n", book.author); printf("Book subject : %s\n", book.subject); printf("Book book_id : %d\n", book.book_id); }
Book title : C Programming Book author : Nuha Ali Book subject : C Programming Tutorial Book book_id : 6495407 Book title : Telecom Billing Book author : Zara Ali Book subject : Telecom Billing Tutorial Book book_id : 6495700
指向结构的指针
定义指向结构的指针,方式与定义指向其他类型变量的指针相似,格式如下:
struct Books *struct_pointer;
指针变量存储结构变量的地址 struct_pointer = &Book1;
使用指向该结构的指针访问 结构成员 struct_pointer->title;
#include <stdio.h> #include <string.h> // 定义一个结构类型 struct Books{ char title[50]; char author[50]; char subject[100]; int book_id; }; void printBook(struct Books* book); /* 函数声明 */ int main(){ struct Books Book1; /* 声明 Book1,类型为 Books */ struct Books Book2; /* 声明 Book2,类型为 Books */ /* Book1 详述 */ strcpy(Book1.title, "C Programming"); strcpy(Book1.author, "Nuha Ali"); strcpy(Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; /* Book2 详述 */ strcpy(Book2.title, "Telecom Billing"); strcpy(Book2.author, "Zara Ali"); strcpy(Book2.subject, "Telecom Billing Tutorial"); Book2.book_id = 6495700; printBook(&Book1); /* 通过传 Book1 的地址来输出 Book1 信息 */ printBook(&Book2); /* 通过传 Book2 的地址来输出 Book2 信息 */ return 0; } void printBook(struct Books* book){ printf("Book title : %s\n", book->title); printf("Book author : %s\n", book->author); printf("Book subject : %s\n", book->subject); printf("Book book_id : %d\n", book->book_id); }
Book title : C Programming Book author : Nuha Ali Book subject : C Programming Tutorial Book book_id : 6495407 Book title : Telecom Billing Book author : Zara Ali Book subject : Telecom Billing Tutorial Book book_id : 6495700
参考
原文地址:https://www.cnblogs.com/LXP-Never/p/15010259.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 记录一次SpringBoot Autowired为null的错误
- Collection接口-常用方法
- Qt开源作品34-qwt无需插件源码
- Qt开源作品35-秘钥生成器
- Qt开源作品36-程序守护进程
- Qt开源作品37-网络中转服务器
- Qt编写安防视频监控系统27-GPU显示
- Qt编写安防视频监控系统28-摄像机点位
- Qt编写安防视频监控系统29-掉线重连
- Qt编写安防视频监控系统30-GPS运动轨迹
- Qt编写安防视频监控系统31-onvif设备搜索
- Qt编写安防视频监控系统32-onvif信息获取
- Qt编写安防视频监控系统33-onvif云台控制
- Qt编写安防视频监控系统34-onvif事件订阅
- Qt编写安防视频监控系统35-onvif抓拍图片