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 ...
随机推荐
- (四)HTTP消息报头
HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成.请求消息和响应消息都是由开始行,消息报头,空行(只有CRLF的行),消息正文组成.对于请求消息,开始行就是请求行:对于响应消息,开始行就是 ...
- ZOJ 1005 Jugs(BFS)
Jugs In the movie "Die Hard 3", Bruce Willis and Samuel L. Jackson were confronted with th ...
- CF295C Greg and Friends
首先 我们考虑每次船来回运人时都可以看成一种dp状态 又因为人的体重只有50kg和100kg两种, 所以我们可以开一个三维数组dp[i][j][k],第1维表示在出发岸50kg有i个,第2维表示在出发 ...
- 3.5 MyLinkedList 实现
3.5 MyLinkedList 类的实现 MyLinkedList 将用双链表实现,并且还需要保留该表两端的引用.这将需要三个类 MyLinkedList 类,包含到两端的链.表的大小以及一些方法. ...
- C/C++模运算(正负整数)
模运算 模运算:又称为取余运算 正整数的模运算 对于正整数a,b 如果\(a=q\times b+r\)其中\(0\le r < b\) 则有\(a \bmod b=r\)即 \(a\%b=r\ ...
- Youtube订阅——解决在弹窗内使用Youtube订阅按钮高度显示不全的问题
背景:公司网站业务在做海外营销网站,为了配合营销工作,前端总要在各种地方添加各种社媒订阅(摊手.jpg):最近遇到的是在弹窗内展示公司的Youtube账号的订阅按钮. 理想:我想使用的例子是这样的: ...
- python更改默认版本
1. rm /user/bin/python2. ln -s /usr/bin/python3.5 /usr/bin/python3. PATH=/usr/bin:$PATH
- webpack配置babel篇
babel-polyfill & babel-runtime & babel-preset-env babel-core babel-core 的作用是把 js 代码分析成 ast , ...
- C# Span 源码解读和应用实践
一:背景 1. 讲故事 这两天工作上太忙没有及时持续的文章产出,和大家说声抱歉,前几天群里一个朋友在问什么时候可以产出 Span 的下一篇,哈哈,这就来啦!读过上一篇的朋友应该都知道 Span 统一了 ...
- 淘宝客?CPS技术是怎么实现的?
前言 微信搜[Java3y]关注这个有梦想的男人,点赞关注是对我最大的支持! 文本已收录至我的GitHub:https://github.com/ZhongFuCheng3y/3y,有300多篇原创文 ...