一、定义结构

结构体特点:

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)相关推荐

  1. 结构体类型struct

    目录 1 结构体类型的声明及变量的定义 2 结构体变量的初始化 2.1 整体初始化 2.2 用成员名进行初始化 3 结构体变量成员的引用 4 结构体变量的运算 4.1 赋值 4.2 取址 结构体类型是 ...

  2. C语言:关键字---struct(声明结构体类型)

    C语言32个关键字 有32个关键字详细说明,还有跳转链接! 一.struct-简介 struct就是结构体,用来描述需要相同类型或不同类型数据的数据对象. 通俗的说法就是打包封装,将一些分散的数据整合 ...

  3. 【C进阶】之结构体类型( struct)

    结构体类型( struct) 1 结构体相关的概念 2 声明结构体类型的语法格式 3 定义结构体类型的变量 4 结构体中成员的访问 5 定义普通的结构体类型的变量,并访问 5.1 先声明结构体类型,在 ...

  4. 第九章 使用结构体类型处理组合数据——用户自定义数据类型

    9.1 定义和使用结构体变量 例9.1 把一个学生的信息放在一个结构体变量中,然后输出这个学生的信息. 程序代码如下: #include <stdio.h> int main() {str ...

  5. C语言程序设计 使用结构体类型处理组合数据——用户自定义数据类型

    1 定义和使用结构体变量 1.1 自定义建立结构体类型 好处:反映出成员之间的内在联系. 在程序中建立所需要结构体类型.例如: 指定了一个新的结构体类型struct student. struct是声 ...

  6. c语言存放学生信息的结构体类型,定义一个学生结构体类型

    满意答案 zergling333 推荐于 2018.02.25 采纳率:56%    等级:12 已帮助:6763人 定义一个结构体类型: struct student {int num; char ...

  7. C++类和结构体 | 类与结构体类型

    C++类与结构体类型 C++与C语言不同,在C语言的基础上增加了class类型后,仍保留了结构体类型struct,而且把它的功能也扩展了,允许用struct来定义一个类型,可以将前面用关键字class ...

  8. C语言基础 - 结构体类型字节对齐总结

    一.什么是字节对齐 在计算机中,内存空间是按照字节(1B = 8 bit)划分的,每一个字节都有一个编号,这就是字节的地址.理论上可以从任意起始地址访问任意数据类型的变量,但在实际使用中,访问特定数据 ...

  9. C语言结构体(struct)类型的各种用法

    文章目录 一.基本概念 二.结构体定义的三种方式(声明后有不能忘了:号) 三.访问结构体成员 四.结构体数组 五.结构体的嵌套 一.基本概念 在C语言中,可以定义结构体类型,将多个相关的类型的变量包装 ...

最新文章

  1. 剑鱼行动(普里姆算法)
  2. python 打包文件
  3. 启明云端分享|sigmastar SSD201/ssd202核心板升级参考,可实现开机自动从 SD 卡升级固件或开机自动从 SD 卡烧录 MAC 地址
  4. 文本相似度几种计算方法及代码python实现
  5. mongo-express 远程代码执行漏洞(CVE-2019-10758)
  6. CI项目设计Redis队列
  7. 子网/子网掩码原理简介
  8. python mock测试_使用mock测试python中的函数
  9. 定制Bootstrap
  10. Protocol Buffers proto语言语法说明
  11. 39套漂亮的后台模板
  12. Docker快速配置指南
  13. Lattice的JTAG编程烧录
  14. 启动3Dmax到初始化..界面卡住然后闪退解决办法
  15. 电音中DJ/Producer/MC/EDM/Remix/Mix的名词解释(转)
  16. Python爬虫:斗鱼TV
  17. 解决 Ubuntu 22.04 Fractional Scaling 画面伸缩后应用程序模糊
  18. js设置弹出式独立窗口页面,和 window 的方法
  19. BZOJ4765 普通计算姬
  20. 交警那不了了之的办事,涉案人员逃逸至今仍没归案

热门文章

  1. 2022/06/06 day07:Scanner类、Random类、ArrayList 类
  2. 车马邮件都慢,一生只够爱一个人
  3. 数据挖掘学习日记1·有监督学习与无监督学习
  4. 数据在云中存储安全如何保障?从三个方面出发
  5. 用python画写轮眼_创意scratch编程课:火影经典忍术,宇智波佐助的写轮眼!
  6. JAVA 16方格排序游戏
  7. 2022软件测试技能 Fiddler HTTP抓包调试工具完整详细教程
  8. 外卖小程序发布商品时,要注意的地方-微信小程序教程32
  9. 让复杂Json数据和对象自由转换 --- Gson
  10. intuitionistic fuzzy set 运算规则python实现