结构体类型(struct)
一、定义结构
结构体特点:
1、结构是由不同数据类型的数据组成的集合体。
2、结构由数目固定的成员构成
3、 各成员可以具有不同的数据类型
4、一个结构变量在内存占有一片连续的存储空间
定义结构体需要先对结构体类型的组成进行描述,定义方法如下:
struct 结构体类型名称{数据类型 成员名1;数据类型 成员名2;数据类型 成员名3;......数据类型 成员名n;};
结构体定义完成后,结构体类型名称在程序中的地位等同于整形(int),浮点型(double)这样的数据类型。
例如:
struct employee
{ char name [ 10 ] ;double salary ;char phone [ 20 ] ;
} ;
可以用不同的方法定义一个结构变量:
(1) 声明类型之后声明变量
struct employee
{ char name [ 10 ] ;double salary ;char phone [ 20 ] ;
} ;
int main()
{ employee worker1,worker2[101];
}
(2) 声明类型的同时声明变量
struct employee
{ char name [ 10 ] ;double salary ;char phone [ 20 ] ;
} worker1,worker2[101];
(3) 直接声明结构类型变量( 不常用)
struct
{ char name [ 10 ] ;double salary ;char phone [ 20 ] ;
} worker1,worker2[101];
二、访问结构
访问结构变量的成员
一般形式为:结构体变量名.成员名
例如:
employee worker1,worker2[101];cin>>worker1.name;cin>>worker2[1].salary>>worker2[1].phone;
或者
struct
{ char name [ 10 ] ;double salary ;char phone [ 20 ] ;
} worker1={ xiaoming, 5000, 400823823 };
用指针访问结构变量的成员
1、结构指针->成员
2、(*结构指针).成员
例:
# include <iostream>
using namespace std ;
# include <cstring>
struct person
{ char name[20] ; unsigned long id; double salary;
} ;
int main ( )
{ person pr1 ;person * pp ; // 定义结构指针pp = & pr1 ; // 取结构变量地址strcpy ( pp -> name , “David Marat” ) ; // 对结构成员赋值pp -> id = 987654321 ;pp -> salary = 335.0 ;cout << pp -> name << ‘\t’ << pp -> id << ‘\t’ << pp -> salary << endl ;
}
注意:对字符数组赋值时用strcpy与cin是不一样的,前者可以加上空格,而后者加上空格则会导致结果出现偏差。
类型相同的结构变量可以整体赋值
# include <iostream>
using namespace std ;
struct weather
{ double temp; double wind; } yesterday ;
int main ( )
{ weather today ; yesterday . temp = 10.5 ; yesterday . wind = 3.1 ;today = yesterday ; // 结构变量整体赋值cout << “Temp = ” << today . temp << endl ;cout << “Wind = ” << today . wind << endl ;
}
这样yesterday这一结构变量内的值就赋给了today。
类型相同的结构变量是指同一标识符变量说明的变量
例如
struct weather1 { double temp; double wind; } yesterday ;struct weather2 { double temp; double wind; } today ;
yesterday 和 today尽管成员相同,但不是同一类型的变量不可以整体赋值。
三、自引用结构
在结构体内部包含一个类型为该结构的成员这是非法的。
如:
struct node{int a;char name[101];node p;//错的
}two;
其中p的存在是非法的,因为成员p又是另外一个完整的结构,而p的结构中又有成员p,这就有点像永远不会停止的递归,是非法的。但如果是结构体指针的话就是合法的。
struct node{int a;char name[101];node *p;
}two;
为什么这是合法的呢?
因为其中指针的长度在被定义前就一定被编译器知道,而如果其中不是指针而是结构体那么编译器是不知道它的长度的,自然会报错。
结构体类型(struct)相关推荐
- 结构体类型struct
目录 1 结构体类型的声明及变量的定义 2 结构体变量的初始化 2.1 整体初始化 2.2 用成员名进行初始化 3 结构体变量成员的引用 4 结构体变量的运算 4.1 赋值 4.2 取址 结构体类型是 ...
- C语言:关键字---struct(声明结构体类型)
C语言32个关键字 有32个关键字详细说明,还有跳转链接! 一.struct-简介 struct就是结构体,用来描述需要相同类型或不同类型数据的数据对象. 通俗的说法就是打包封装,将一些分散的数据整合 ...
- 【C进阶】之结构体类型( struct)
结构体类型( struct) 1 结构体相关的概念 2 声明结构体类型的语法格式 3 定义结构体类型的变量 4 结构体中成员的访问 5 定义普通的结构体类型的变量,并访问 5.1 先声明结构体类型,在 ...
- 第九章 使用结构体类型处理组合数据——用户自定义数据类型
9.1 定义和使用结构体变量 例9.1 把一个学生的信息放在一个结构体变量中,然后输出这个学生的信息. 程序代码如下: #include <stdio.h> int main() {str ...
- C语言程序设计 使用结构体类型处理组合数据——用户自定义数据类型
1 定义和使用结构体变量 1.1 自定义建立结构体类型 好处:反映出成员之间的内在联系. 在程序中建立所需要结构体类型.例如: 指定了一个新的结构体类型struct student. struct是声 ...
- c语言存放学生信息的结构体类型,定义一个学生结构体类型
满意答案 zergling333 推荐于 2018.02.25 采纳率:56% 等级:12 已帮助:6763人 定义一个结构体类型: struct student {int num; char ...
- C++类和结构体 | 类与结构体类型
C++类与结构体类型 C++与C语言不同,在C语言的基础上增加了class类型后,仍保留了结构体类型struct,而且把它的功能也扩展了,允许用struct来定义一个类型,可以将前面用关键字class ...
- C语言基础 - 结构体类型字节对齐总结
一.什么是字节对齐 在计算机中,内存空间是按照字节(1B = 8 bit)划分的,每一个字节都有一个编号,这就是字节的地址.理论上可以从任意起始地址访问任意数据类型的变量,但在实际使用中,访问特定数据 ...
- C语言结构体(struct)类型的各种用法
文章目录 一.基本概念 二.结构体定义的三种方式(声明后有不能忘了:号) 三.访问结构体成员 四.结构体数组 五.结构体的嵌套 一.基本概念 在C语言中,可以定义结构体类型,将多个相关的类型的变量包装 ...
最新文章
- 剑鱼行动(普里姆算法)
- python 打包文件
- 启明云端分享|sigmastar SSD201/ssd202核心板升级参考,可实现开机自动从 SD 卡升级固件或开机自动从 SD 卡烧录 MAC 地址
- 文本相似度几种计算方法及代码python实现
- mongo-express 远程代码执行漏洞(CVE-2019-10758)
- CI项目设计Redis队列
- 子网/子网掩码原理简介
- python mock测试_使用mock测试python中的函数
- 定制Bootstrap
- Protocol Buffers proto语言语法说明
- 39套漂亮的后台模板
- Docker快速配置指南
- Lattice的JTAG编程烧录
- 启动3Dmax到初始化..界面卡住然后闪退解决办法
- 电音中DJ/Producer/MC/EDM/Remix/Mix的名词解释(转)
- Python爬虫:斗鱼TV
- 解决 Ubuntu 22.04 Fractional Scaling 画面伸缩后应用程序模糊
- js设置弹出式独立窗口页面,和 window 的方法
- BZOJ4765 普通计算姬
- 交警那不了了之的办事,涉案人员逃逸至今仍没归案
热门文章
- 2022/06/06 day07:Scanner类、Random类、ArrayList 类
- 车马邮件都慢,一生只够爱一个人
- 数据挖掘学习日记1·有监督学习与无监督学习
- 数据在云中存储安全如何保障?从三个方面出发
- 用python画写轮眼_创意scratch编程课:火影经典忍术,宇智波佐助的写轮眼!
- JAVA 16方格排序游戏
- 2022软件测试技能 Fiddler HTTP抓包调试工具完整详细教程
- 外卖小程序发布商品时,要注意的地方-微信小程序教程32
- 让复杂Json数据和对象自由转换 --- Gson
- intuitionistic fuzzy set 运算规则python实现