C和指针---结构和联合
一、结构
1、C提供了两种类型的聚合数据类型---数组、结构。数组是相同类型的元素集合,它的每个元素长度相同,故可以通过下标引用或指针间接访问来选择的;而结构可以把不同类型的值存储在一起,由于结构的成员长度可能不相同,故不能用下标访问,每个结构体都有自己的名字,故可以通过名字访问结构体成员。
数组名是一个指针常量,因为它是指针标量故不能作为左值;当做右值使用时,它的值表示指向数组的第一个元素的指针。结构名是一个标量,当左值时表示存储的内存位置;当右值时,他表示的是存储在结构中值。
2、结构体几种声明形式:
函数原型:
struct tag {member_list} variable_list;
- 先定义结构体类型,再定义结构体变量。
struct Sample{
int a;
char b;
float c;
};
struct Sample x,y[20],*z; //此时x,y[20],*z为Sample的结构体变量
- 定义结构体类型的同时定义结构体变量。
struct Sample{
int a;
char b;
float c;
}x,y[20];
此时还可以继续定义student结构体变量,如:
struct Sample *z;
- 不指定类型名而直接定义结构体变量
struct {
int a;
char b;
float c;
}x,y[20];
这种方法没有定义结构类型名,而直接定义结构体变量x,y[20]之后,就不能再继续定义该类型的变量。
- 用typedef定义结构体变量
typedef struct {
int a;
char b;
float c;
}Sample;
上面的代码,定义了一个结构体变量类型名。定义结构体变量方法如下:
Simple x;
Simple y[20],*z;
3、结构的初始化:
struct Sample{
int a;
char b;
float c;
}x={3,“hello“,1.1314};
4、结构成员访问
以下面结构体为例:
struct COMPLEX {
float f;
int a[20];
long *lp;
struct SIMPLE s;
struct SIMPLE sa[10];
struct SIMPLE *sp;
}comp;
- 直接访问:通过点操作符直接访问(.)。点操作符接受两个操作数,左边操作数就是结构体变量的名字,右边是需要访问的成员名字。如:comp.a、(comp.s).a、(comp.sa)[4]
- 间接访问:如果你拥有一个指向结构的指针。如:
void func (struct COMPLEX *cp);
首先对指针执行间接访问操作,然后在使用点操作符来访问他的成员。点操作符的优先级高于间接访问操作符,故在表达式中必须应用()。如:(*cp).f。
或者利用‘->’操作符来完成此项工作,如:cp -> f。
二、联合
1、联合的声明和结构类似,但他的行为方式却和结构不同。联合的所有成员引用的是内存中的相同位置,可以在不同时刻把不同的东西存储在同一位置。
函数原型:
union tag {member_list} variable_list;
如:
union {
float f;
int i;
}fi;
2、联合的初始化:
联合变量可以被初始化,但这个初始值必须是联合的第一个成员的类型,而且他必须位于一对花括号里面。如:
union{
int a;
float b;
char c[4];
} x={5};
把x.a初始化为5。我们不能把它初始化为一个浮点或字符值,因为就算你赋值为其他值也会转化为一个整型值赋值给x.a。
C和指针---结构和联合的更多相关文章
- 【AT91SAM3S】SAM3S-EK Demo工程中,LCD驱动程序的加载(函数指针结构体)
为了调试LCD,在英倍特的板子上烧Atmel的sam3s-ek_demo_1.4_source示例代码.LCD显示正常了,却找不到LCD的驱动究竟在哪. 花了好久,追踪到了这个执行过程. 进入main ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- C语言的结构和联合,以及PHP是怎么实现弱类型的
C语言的结构(struct):包含多个成员,可能有多种数据类型,并且需要分配几种类型占用空间之和的空间. 联合(union):支持多种类型,供使用者使用其中一种数据类型,当然是需要分配其中占用空间最大 ...
- 【转】结构struct 联合Union和枚举Enum的细节讨论
结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...
- Go-常识补充-切片-map(类似字典)-字符串-指针-结构体
目录 Go 常识补充 Go 命名 打印变量类型科普 _ 关键字 命名规范相关 包目录规范 切片 多维切片 切片初始化的方法 多维切片初始化 切片删除元素(会略微影响效率 ,少用) copy 函数 打散 ...
- C和指针 第十章 结构和联合 (二)
结构体传值: 结构体也是标量,像字符和整数一样,可以传递给一个函数,但是传入整个结构体效率很低,可以传入指向结构体的指针来提高效率.如果不希望程序对结构体变量改变可以加入const关键词. typed ...
- 《C和指针》 读书笔记 -- 第10章 结构和联合
1.聚合数据类型能够同时存储超过一个的单独数据,c提供了两种类型的聚合数据类型,数组和结构. 2.[1] struct SIMPLE { int a; }; struct SIMPLE x; [2] ...
- C的指针疑惑:C和指针10(结构和联合)
结构也可以作为传递给函数的参数,它们也可以作为返回值从函数返回,相同类型的结构体变量相互之间可以赋值. 申明结构时使用另一种良好技巧是用typedef创建一种新的类型. typedef struct{ ...
- C和指针 第十章 结构和联合 习题
1. 记账信息结构联合 typedef struct { unsigned int areaNum; unsigned int transNum; unsigned int station; } ph ...
随机推荐
- 使用rabbitmq实现集群im聊天服务器消息的路由
这个地址图文会更清晰:https://www.jianshu.com/p/537e87c64ac7 单机系统的时候,客户端和连接都有同一台服务器管理. image.png 在本地维护一份userI ...
- 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(1) - 执行在不同CM内核下
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记(1)之执行在不同CM内核下. 文接上篇 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计&g ...
- 内网渗透 day4-meterpreter基本命令
meterpreter基本命令 目录 1.getuid 查看当前用户 1 2.getpid 查看当前的进程id 1 3.getsystem 初步提权 1 4.ps 1.查看进程列表2.帮助我们获取pi ...
- 国内申请苹果美区ID
首先声明,纯粹是自己为了玩游戏而找到的方法..... 不用翻墙,在国内,就可以申请非国区的apple ID. 1.你自己申请一个自己的国区的apple ID,地址:https://appleid.ap ...
- Scanner对象
Scanner对象 通过Scanner类来获取用户的输入. 使用需导入 java.util.Scanner 包. 基本语法: Scanner s = new Scanner(System.in); n ...
- Nagios 告警配置太复杂?CA简单实现Nagios自定义多功能告警
Nagios 是一个插件式的监控系统,可以监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机参数以及服务,同时提供异常告警通知功能等.Nagios 支持客户端的数据采集,通过编写客户端插件 ...
- 性能工具-CPU
- Ceph的Mon数据重新构建工具
关于mon的数据的问题,一般正常情况下都是配置的3个mon的,但是还是有人会担心 Mon 万一三个同时都挂掉了怎么办,那么集群所有的数据是不是都丢了,关于后台真实数据恢复,有去后台取对象,然后一个个拼 ...
- RedisEclipse
1.Eclipse配置 2.HelloWorld import redis.clients.jedis.Jedis; public class TestPing { public static voi ...
- window下开启关闭mysql服务
cmd:管理员模式 net start mysql net stop mysql