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 ...
随机推荐
- Learn day10 锁
1.锁 # ### 锁 from multiprocessing import Lock,Process import json,time """ # 创建一把锁 loc ...
- python给图片添加文字
如何用几行代码给图片加上想要的文字呢? 下面为大家说下实现过程. 关注公众号 "轻松学编程"了解更多. 有图如下,想添加自写的诗句 诗句 静安心野 朝有赤羽暮落霞, 小舟载我湖旋停 ...
- P5958 【[POI2017]Sabotaż】
P5958 [[POI2017]Sabotaż] 题意描述 在一棵以1号节点为根节点的树上,有很多纯洁的白点, BUT,突然有一个黑点出现(可能在任意位置) 它要染黑尽可能多的节点,而在一棵子树中, ...
- [C#] (原创)一步一步教你自定义控件——04,ProgressBar(进度条)
一.前言 技术没有先进与落后,只有合适与不合适. 本篇的自定义控件是:进度条(ProgressBar). 进度条的实现方式多种多样,主流的方式有:使用多张图片去实现.使用1个或2个Panel放到Use ...
- Photoshop CC 习惯设置
安装后,一般设置: 1.编辑--首选项--常规 2.一般更改内容为: 性能 内存使用情况在50%-80%之间 暂存盘:除去C盘意外的其他盘 单位和标尺:以px为单位 其他根据喜好设定!
- springcloud feign使用
1.Spring cloud fein的继承特性 通过对接口的继承,能够实现对fein客户端和feign服务器代码量的减少. 2.Ribbon配置 {服务名}.ribbon.ConnectTimeOu ...
- php映射echarts柱状图
多种样式柱状图 前台部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- 微信小程序获取二维码API
<%@ WebHandler Language="C#" Class="ce" %> using System; using System.Web; ...
- martini-md参数(mdp文件)
输入参数:一个典型的mdp文件 1 ; 2 ; STANDARD MD INPUT OPTIONS FOR MARTINI 2.x 3 ; Updated 02 feb 2013 by DdJ 4 ; ...
- 小谢第58问:nuxt搭建企业官网
最近公司要重构公司官网,jq+bootstrap 改为了vue,刚开始我以为用vue不是挺好的嘛,后来才发现,有于vue单页面的特性,不利于搜索引擎的抓取,因此在seo方面需要另外想办法,于是乎,就找 ...