C语言之结构体和共用体
C语言之结构体和共用体
算上这篇笔记加上之前的四篇笔记,C语言基础我们也就告一段落了,对于刚刚接触c语言的童鞋们来说,这些以及足够了,稍后我会发布数据结构,对于想要深入学习的童鞋可以继续关注。本人也算一个半吊子的程序员 ,同时也在不断学习。希望我们可以相互学习相互交流,如果有什么不对的地方,可以给我邮件,1509965601@qq.com。看到邮件我会随时回复。
结构体
【1】结构体一般形式struct 结构体名
{
数据类型 成员名1;
数据类型 成员名2;
数据类型 成员名n;
} 变量名;struct 结构体名
{
数据类型 成员名1;
数据类型 成员名2;
数据类型 成员名n;
} ;
struct 结构体名 结构体变量名;struct
{
数据类型 成员名1;
数据类型 成员名2;
数据类型 成员名n;
} 变量名;
【2】:求结构体占用内存大小
sizeof(运算量) 运算量可以是变量、数组、或者结构体变量,可以是数据类型的名称
例如:sizeof(struct 结构体名);
siezof(变量);【3】:结构体变量使用
结构体变量使用一般形式:结构体变量名.成员名【4】结构体初始化
1.struct 结构体名
{
数据类型 成员名1;
数据类型 成员名2;
数据类型 成员名n;
} 变量名={成员名1,成员名2,成员名3};2.typedef struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} Book;
此方法在函数里面 Book用法如同int【5】结构体包含其他结构体以及包含指向自己类型的指针
此结构体的声明包含了其他的结构体
struct COMPLEX
{
char string[100];
struct SIMPLE a;
};此结构体的声明包含了指向自己类型的指针
struct NODE
{
char string[100];
struct NODE *next_node;
};【6】 如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明
struct B; //对结构体B进行不完整声明
struct A //结构体A中包含指向结构体B的指针
{
struct B *partner;
//other members;
};//结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明
struct B
{
struct A *partner;
//other members;
};【7】结构体作为函数参数
结构作为函数参数,传参方式与其他类型的变量或指针类似。
void printBook( struct Books book );
void printBook( struct Books book )
{
printf( “Book title : %s\n”, book.title);
}【8】指向结构的指针
1.可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:
struct Books *struct_pointer;2.在上述定义的指针变量中存储结构变量的地址。
struct_pointer = &Book1;3.为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符
struct_pointer->title;
【9】 结构体形式使函数返回多个数据+数组
#include<stdio.h>typedef struct
{
int size;
int *t;
} vv;vv fun(vv temp)
{
static a[] = {2,4,5,7,3};
temp.size = sizeof(a)/4;
temp.t = a;
return temp;
}int main()
{
vv p;
int i;
p = fun§;
printf("%d\n",p.size);
for(i = 0;i < p.size;i++)
printf("%d\n",p.t[i]);
}
【10】共用体
共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。
1.定义共用体,您必须使用 union 语句,方式与定义结构类似。
union Data
{
int i;
float f;
char str[20];
};
2.存储大小按照最大的成员算。
上述共用体大小为20
**【11】 typedef**
1.为类型取一个新的名字。 typedef unsigned char BYTE; BYTE b1, b2;2.使用 typedef 来为用户自定义的数据类型取一个新的名字。例如,您可以对结构体使用 typedef 来定义一个新的数据类型名字typedef struct Books{char title[50];char author[50];char subject[100];int book_id;} Book;3.typedef 和 #define的区别#define 实质是文本替换#define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的
C语言之结构体和共用体相关推荐
- 【C语言】结构体、共用体、位域
结构体 1. 结构体的声明方法 struct struct_name {data_type member1;data_type member2;.. }; 这是其中一种声明方式~ 2.定义一个结构体变 ...
- C语言入门系列之10.结构体和共用体
文章目录 一.结构体变量的基本使用 1.概述 2.定义结构体类型变量的方法 3.结构体变量的引用 4.结构体变量的初始化 二.结构体的高级应用 1.结构体数组 Ⅰ定义结构体数组 Ⅱ结构体数组的初始化 ...
- C语言结构体与共用体03
小甲鱼结构体与共用体03 实战例题:有一个结构体变量stu,内含学生学号.姓名和3门课程的成绩.通过调用函数print将它们输出. ①先用结构体变量作函数参数: //先用结构体变量作函数参数 #inc ...
- C语言-结构体与共用体
int 4字节:char 1字节:short 2字节:float 4字节: 1字节bytes=8位bits(2^8): struct date {int month;int day;int year; ...
- 江哥带你玩转C语言 | 14 - 结构体-枚举-共用体
什么是结构体 结构体和数组一样属于构造类型 数组是用于保存一组相同类型数据的, 而结构体是用于保存一组不同类型数组的 例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为 ...
- 结构体与共用体05 - 零基础入门学习C语言57
第十章:结构体与共用体05 让编程改变世界 Change the world by program 对链表结点的删除操作实现 实现源代码: [codesyntax lang="c" ...
- 结构体与共用体07 - 零基础入门学习C语言59
第十章:结构体与共用体07 让编程改变世界 Change the world by program 用typedef定义类型 用typedef声明新的类型名来代替已有的类型名 声明INTEGER为 ...
- 结构体与共用体C语言
结构体与共用体 结构体的定义 引例 比如学生是一个整体,学生有姓名.性别.学号--我们更希望把一个事物整体的操作 自定义数据类型 基础数据类型是电脑定义好了的,默认的数据类型 自定义数据类型意义:需要 ...
- C语言——结构体、共用体
结构体.共用体 1.结构体 基础知识 代码基本写法 内存对齐 2. 共用体 引论 定义 基础写法 共用体大小 1.结构体 基础知识 类似于Java中的javaBean,可以将一些变量封装成一些对象.同 ...
最新文章
- java容易混淆的知识点
- java逻辑代码_Java逻辑代码判断字数
- ABAP 生成ZIP压缩文件的代码
- 服务器能进系统滴滴响,曙光服务器开机滴滴响
- OpenGL noperspective在窗口空间中线性插值的实例
- 用API获得Internet Explorer_Server类的HTML
- LoadRunner脚本篇
- 谈谈html5存储之IndexdDB
- 高级着色语言HLSL入门(5)
- Java —— Reflect反射机制
- js与设计模式----简单工厂
- esxi 命令行查看设备
- 影音先锋 android下载地址,影音先锋手机版-影音先锋下载v5.8.2 安卓手机版-西西软件下载...
- 计算机桌面运维问题分类,桌面运维工程师常见面试问题汇总
- 如何在android lolipop中开启google now
- Mac无法连接到WiFi怎么办?帮您恢复在线的最佳解决方案
- Win10、Win7系统,电脑蓝屏,什么原因怎么解决?一篇文章彻底解决!
- 百度地图实现鼠标绘制多边形并获取所有点坐标
- java不支持类型_java泛型为什么不支持原始类型?
- python语言入门自学-Python入门
热门文章
- Linux中Docker的yum源与镜像加速器
- 11年亚锦赛球员数据_2020年11月楼市数据更新!全美房屋中间价持续上涨
- 重启物理机后kvm无法启动虚拟机
- 计算机应用基础离线考核,东师2016年秋季《计算机应用基础》期末考核离线作业...
- linux服务器系统内核参数优化
- python的requests库安装失败_robot framework-requests库安装过程问题解决
- python搜索关键词自动提交_python+selenium实现自动化百度搜索关键词
- 拉普拉斯变换公式表_复变函数之拉普拉斯变换小结
- Disruptor内存消息队列简单使用
- 前端制作动画的几种方式(css3,js)