C语言之结构体和共用体

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 语句是由预编译器进行处理的
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值