首页 > 其他分享 >C温故补缺(八):结构体与共用体

C温故补缺(八):结构体与共用体

时间:2022-11-12 14:22:06浏览次数:47  
标签:typedef struct int simple 补缺 共用 结构 温故 变量

结构体与共用体

结构体

是一个可以存储多个不同类型的变量的结构,类似于面对对象中的类(只有成员变量的类).

struct tag { 
    member-list
    member-list 
    member-list  
    ...
} variable-list ;

tag 是结构体标签。

member-list 是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。

variable-list 结构变量,定义在结构的末尾,最后一个分号之前,可以指定一个或多个结构变量

一般可以省略tag或variable-list

struct 
{
    int a;
    char b;
    double c;
} s1;

但是这样只能在声明结构时定义变量,之后就不能再定义变量了

struct SIMPLE
{
 int a;
 char b;
 double c;
};

这样才是结构体的最一般的形式,之后再定义结构体变量用struct SIMPLE s2

这两个结构体虽然成员变量相同,但他们的变量不是相同的类型,是不能直接做赋值运算的

结构体和typedef

typedef是用来给数据类型重命名的,但是当和结构体共用时容易混淆

①直接连用

typedef struct simple{
    int a;
    int b;
};
struct simple s1;

这样没什么用

②取别名

typedef struct simple{
    int a;
    int b;
}Smp;
Smp s1;

这样重命名,就可以直接用第二个名字Smp定义变量,而不需加struct

③省略tag

typedef struct{
    int a;
    int b;
}Smp;
Smp s1;

④对已经声明完的结构体重命名

struct simple{
    int a;
    int b;
}s1;
typedef struct simple Smp;

⑤也可以定义结构体指针别名

typedef struct simple{
     int a;
     int b;   
}*sp;
等价于:typedef struct simple *sp;
调用:
sp s1=malloc(sizeof(struct simple));
s1->a=0;

⑥同时定义结构体别名和结构体指针别名(常用,且经常省略tag)

typedef struct{
    int a;
    int b;
}simple,*Spoint;
Spoint s1=malloc(sizeof(simple));
s1->i=3;

这样就可以用simple定义结构体变量,同Spoint定义结构体变量指针

共用体

只是结构上和结构体相似,但共用体更接近于一个变量,这个变量的类型可以是多种的.但是它不能同时有多个类型

如:

union Data{
    int i;
    long f;
    char c[20];
}

用Data定义的变量可以是int,long或char []型的,它的内存空间按最大的变量算

union的作用就是允许同一段内存空间存储不同的数据类型,这就是"共用"的实质

标签:typedef,struct,int,simple,补缺,共用,结构,温故,变量
From: https://www.cnblogs.com/Tenerome/p/Creview8.html

相关文章

  • C温故补缺(七):函数指针与回调函数
    函数指针与回调函数函数指针就是指向函数调用栈地址的指针,定义时须和函数的返回值类型,参数类型相同如:#include<stdio.h>intmax(intx,inty){returnx>y?x:y;......
  • C温故补缺(六):C反汇编常用的AT&Tx86语法
    C语言反汇编用到的AT&Tx86汇编语法参考:CSDN1,CSDN2默认gcc-S汇编出的,以及反汇编出的,都是AT&Tx86代码,可以用-masm=intel指定为intelx86汇编格式gcc-Stest.c-m......
  • C温故补缺(五):main函数的参数
    main()的参数main()函数的参数,用于在外部执行时传入参数,类似windows的bat脚本或linux的sh脚本.在bat脚本中传入参数,用%接收.sh脚本的参数用$接收.c语言编译成可执行文......
  • 温故而知新——Java双列集合Map&Stream流
    总体目录:01-双列集合的特点02-Map集合常用的APIMap是顶层接口,常用方法如下:size()、isEmpty()、clear()方法容易理解;put()方法的细节:如果第一次添加元素,返回值为null......
  • C温故补缺(四):GDB
    gdbgdb是由GNU软件社区提供的CDebug工具Pre在调试前,需要先编译.c程序,且要加上-g使输出文件变得可调式gcctest.c-g-otest用gdbtest来调试程序,用quit退出调试......
  • .net 温故知新:【9】.NET日志记录 ILogger使用和原理
    日志日志作为我们程序记录的“黑匣子”不论什么系统都应该使用到的,比如我们经常使用的log4net就是第三方日志记录提供程序。.NET支持使用各种内置和第三方日志记录提供程......
  • 拓端数据tecdat|R语言代写:用R语言填补缺失的数据
    缺少数据在分析数据集时可能不是一个微不足道的问题。如果缺失数据的量相对于数据集的大小非常小,那么为了不偏离分析而忽略缺少特征的少数样本可能是最好的策略,但是留下可用......
  • C温故补缺(三):存储类声明符(auto,register,extern,static)
    auto,register,extern,static四个存储类声明符,用于定义变量/函数的作用域和声明周期①auto:自动变量,即普通变量,在平时定义变量时会自动赋予其auto类型被auto修饰的......
  • C温故补缺(二):volatile
    volatile参考:CSDNvolatile也是一个类型修饰符,被其修饰的变量意味着可以被某些编译器未知的因素修改,如操作系统,硬件,线程等.当遇到volatile修饰的变量时,编译器对访......
  • C温故补缺(一):数据类型和基本类型占位
    数据类型基本类型:就是算术类型,包括整型和实型枚举类型:一组离散的整数void类型:无可用值类型派生类型:指针(*),数组([]),结构体(struct),共用体(union),函数(fun())......