C语言之结构体和共用体

算上这篇笔记加上之前的四篇笔记,C语言基础我们也就告一段落了,对于刚刚接触c语言的童鞋们来说,这些以及足够了,稍后我会发布数据结构,对于想要深入学习的童鞋可以继续关注。本人也算一个半吊子的程序员 ,同时也在不断学习。希望我们可以相互学习相互交流,如果有什么不对的地方,可以给我邮件,1509965601@qq.com。看到邮件我会随时回复。

  • 结构体
    【1】结构体一般形式

    1. struct 结构体名
      {
      数据类型 成员名1;
      数据类型 成员名2;
      数据类型 成员名n;
      } 变量名;

    2. struct 结构体名
      {
      数据类型 成员名1;
      数据类型 成员名2;
      数据类型 成员名n;
      } ;
      struct 结构体名 结构体变量名;

    3. struct
      {
      数据类型 成员名1;
      数据类型 成员名2;
      数据类型 成员名n;
      } 变量名;

    【2】:求结构体占用内存大小
    sizeof(运算量) 运算量可以是变量、数组、或者结构体变量,可以是数据类型的名称
    例如:sizeof(struct 结构体名);
    siezof(变量);

    【3】:结构体变量使用
    结构体变量使用一般形式:结构体变量名.成员名

    【4】结构体初始化
    1.struct 结构体名
    {
    数据类型 成员名1;
    数据类型 成员名2;
    数据类型 成员名n;
    } 变量名={成员名1,成员名2,成员名3};

    2.typedef struct Books
    {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
    } Book;
    此方法在函数里面 Book用法如同int

    【5】结构体包含其他结构体以及包含指向自己类型的指针
    此结构体的声明包含了其他的结构体
    struct COMPLEX
    {
    char string[100];
    struct SIMPLE a;
    };

    此结构体的声明包含了指向自己类型的指针
    struct NODE
    {
    char string[100];
    struct NODE *next_node;
    };

    【6】 如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明

    struct B; //对结构体B进行不完整声明
    struct A //结构体A中包含指向结构体B的指针
    {
    struct B *partner;
    //other members;
    };

    //结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明
    struct B
    {
    struct A *partner;
    //other members;
    };

    【7】结构体作为函数参数
    结构作为函数参数,传参方式与其他类型的变量或指针类似。
    void printBook( struct Books book );
    void printBook( struct Books book )
    {
    printf( “Book title : %s\n”, book.title);
    }

    【8】指向结构的指针
    1.可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:
    struct Books *struct_pointer;

    2.在上述定义的指针变量中存储结构变量的地址。
    struct_pointer = &Book1;

    3.为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符
    struct_pointer->title;
    【9】 结构体形式使函数返回多个数据+数组
    #include<stdio.h>

    typedef struct
    {
    int size;
    int *t;
    } vv;

    vv fun(vv temp)
    {
    static a[] = {2,4,5,7,3};
    temp.size = sizeof(a)/4;
    temp.t = a;
    return temp;
    }

    int main()
    {
    vv p;
    int i;
    p = fun§;
    printf("%d\n",p.size);
    for(i = 0;i < p.size;i++)
    printf("%d\n",p.t[i]);
    }

【10】共用体
共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。
1.定义共用体,您必须使用 union 语句,方式与定义结构类似。
union Data
{
int i;
float f;
char str[20];
};
2.存储大小按照最大的成员算。
上述共用体大小为20

**【11】 typedef**
1.为类型取一个新的名字。   typedef unsigned char BYTE; BYTE  b1, b2;2.使用 typedef 来为用户自定义的数据类型取一个新的名字。例如,您可以对结构体使用 typedef 来定义一个新的数据类型名字typedef struct Books{char  title[50];char  author[50];char  subject[100];int   book_id;} Book;3.typedef 和 #define的区别#define 实质是文本替换#define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的

C语言之结构体和共用体相关推荐

  1. 【C语言】结构体、共用体、位域

    结构体 1. 结构体的声明方法 struct struct_name {data_type member1;data_type member2;.. }; 这是其中一种声明方式~ 2.定义一个结构体变 ...

  2. C语言入门系列之10.结构体和共用体

    文章目录 一.结构体变量的基本使用 1.概述 2.定义结构体类型变量的方法 3.结构体变量的引用 4.结构体变量的初始化 二.结构体的高级应用 1.结构体数组 Ⅰ定义结构体数组 Ⅱ结构体数组的初始化 ...

  3. C语言结构体与共用体03

    小甲鱼结构体与共用体03 实战例题:有一个结构体变量stu,内含学生学号.姓名和3门课程的成绩.通过调用函数print将它们输出. ①先用结构体变量作函数参数: //先用结构体变量作函数参数 #inc ...

  4. C语言-结构体与共用体

    int 4字节:char 1字节:short 2字节:float 4字节: 1字节bytes=8位bits(2^8): struct date {int month;int day;int year; ...

  5. 江哥带你玩转C语言 | 14 - 结构体-枚举-共用体

    什么是结构体 结构体和数组一样属于构造类型 数组是用于保存一组相同类型数据的, 而结构体是用于保存一组不同类型数组的 例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为 ...

  6. 结构体与共用体05 - 零基础入门学习C语言57

    第十章:结构体与共用体05 让编程改变世界 Change the world by program 对链表结点的删除操作实现 实现源代码: [codesyntax lang="c" ...

  7. 结构体与共用体07 - 零基础入门学习C语言59

    第十章:结构体与共用体07 让编程改变世界 Change the world by program 用typedef定义类型 用typedef声明新的类型名来代替已有的类型名   声明INTEGER为 ...

  8. 结构体与共用体C语言

    结构体与共用体 结构体的定义 引例 比如学生是一个整体,学生有姓名.性别.学号--我们更希望把一个事物整体的操作 自定义数据类型 基础数据类型是电脑定义好了的,默认的数据类型 自定义数据类型意义:需要 ...

  9. C语言——结构体、共用体

    结构体.共用体 1.结构体 基础知识 代码基本写法 内存对齐 2. 共用体 引论 定义 基础写法 共用体大小 1.结构体 基础知识 类似于Java中的javaBean,可以将一些变量封装成一些对象.同 ...

最新文章

  1. java容易混淆的知识点
  2. java逻辑代码_Java逻辑代码判断字数
  3. ABAP 生成ZIP压缩文件的代码
  4. 服务器能进系统滴滴响,曙光服务器开机滴滴响
  5. OpenGL noperspective在窗口空间中线性插值的实例
  6. 用API获得Internet Explorer_Server类的HTML
  7. LoadRunner脚本篇
  8. 谈谈html5存储之IndexdDB
  9. 高级着色语言HLSL入门(5)
  10. Java —— Reflect反射机制
  11. js与设计模式----简单工厂
  12. esxi 命令行查看设备
  13. 影音先锋 android下载地址,影音先锋手机版-影音先锋下载v5.8.2 安卓手机版-西西软件下载...
  14. 计算机桌面运维问题分类,桌面运维工程师常见面试问题汇总
  15. 如何在android lolipop中开启google now
  16. Mac无法连接到WiFi怎么办?帮您恢复在线的最佳解决方案
  17. Win10、Win7系统,电脑蓝屏,什么原因怎么解决?一篇文章彻底解决!
  18. 百度地图实现鼠标绘制多边形并获取所有点坐标
  19. java不支持类型_java泛型为什么不支持原始类型?
  20. python语言入门自学-Python入门

热门文章

  1. Linux中Docker的yum源与镜像加速器
  2. 11年亚锦赛球员数据_2020年11月楼市数据更新!全美房屋中间价持续上涨
  3. 重启物理机后kvm无法启动虚拟机
  4. 计算机应用基础离线考核,东师2016年秋季《计算机应用基础》期末考核离线作业...
  5. linux服务器系统内核参数优化
  6. python的requests库安装失败_robot framework-requests库安装过程问题解决
  7. python搜索关键词自动提交_python+selenium实现自动化百度搜索关键词
  8. 拉普拉斯变换公式表_复变函数之拉普拉斯变换小结
  9. Disruptor内存消息队列简单使用
  10. 前端制作动画的几种方式(css3,js)