AutoLeaders控制组——C语言结构体的学习笔记

目录

一、 概述

二、 结构体的知识点

1. 结构体的定义

2. 声明结构体变量

3. 访问结构体成员

4. 结构体的初始化

5. 结构体变量的复制与比较

6. 结构数组

7. 结构体中的数组

8. 结构体中的结构体

9. 结构体与函数

10. 结构体与指针

11. 结构体大小

三、共同体

  • 概述

我们己经知道,数组可以用来表示一组相同类型 (例如 int 或 float)的数据项。但是,如果要用一个名称来表示不同类型的数据集合,就不能用数组了。幸运的是,C 语言支持一种结构化的数据类型,称为结构体(structure),它是一种封装不同类型的数据的机制。

结构体是一种用于处理一组逻辑相关的数据项的简便工具。例如,可以用来表示一个属性集,例如 student_name、roll number 和marks。结构体的概念类似于其他很多语言中的“记录”。

*结构体有助于一种有意义的方法来组织复杂数据。

  • 结构体的知识点
  1. 结构体的定义

与数组不同,结构体首先要先定义结构体的格式,然后再声明结构体变量

例:

struct book_bank

{

char title|20];

char author [15];

int pages; 

float price;

};

//结构体定义其实就是规定了一种格式

  1. 声明结构体变量

结构体变量的声明包括以下部分:

(1)关键宇 struct。

(2)结构体标记待。

(3)由逗号分隔开的变量名列表。

(4)终止分号。

例:struct tag_name,member1,member2;

还有一种定义结构体变量的方法:

struct book_bank

{

char title|20];

char author [15];

int pages; 

float price;

}book1,book2,book3;

但是这样定义变量有几个问题

(1)由于没有标记符名,就不能再用它来声明其他变量了。

(2)通常,结构体定义是出现在程序文件的开头,位于所有变量或函数定义之前。也可以出现在main 和诸如#define 之类的宏定义之前。在这些情况下,结构体定义是全局的,可以被其他函数使用。

所以这样的定义方法要慎用!

typedef int 整型  //取别名

  1. 访问结构体成员

首先要了解运算符点号“.”,用来进行成员和变之间连接

例如:book1.price

通过访问结构体成员,我们可以对结构体变量单独成员赋值

对字符串:
strcpy (book1.title,”Basic”)

scanf(“%s”,book1.title)//和一般字符串处理相同

其他:

book1.price=10

scanf(“%d”,&book1.price)

也可以用指针访问成员

  1. 使用间接表示法(*ptr).x//括号别忘了
  2. 使用选择表示法 ptr->x

  1. 结构体的初始化
struct book_bank

{

char title|20];

char author [15];

int pages; 

float price;

};

struct book_bank book1={“Wise”,”Babala”,100,10};

struct book_bank

{

char title|20];

char author [15];

int pages; 

float price;

}book1={“Wise”,”Babala”,100,10};

注意结构体成员与初始化值一一对应

C语言不允许对模板中的单个结构体成员进行初始化,必须在实际结构体变量的声明

中初始化。

但结构体允许部分初始化,可以只初始化前面的一些成员,未初始化的成员必须位于列

表的末尾,未初始化的成员将进行:对于整数和浮点数,赋给默认值零,对字符及字符串赋给默认值“\0”。

  1. 结构体变量的复制与比较

相同结构体类型的两个变量可以巷普通变量一样进行复制

例:book1=book2

但是C语言不允许对结构体变量进行任何逻辑操作

如要比较两个结构体变量我们应逐个比较结构体各个成员

  1. 结构数组

我们可以声明一个结构体数组,数组每个变量表示一个结构体变量

例:struct class students[100]

初始化也就变成struct class students[3]={{1,3,4,},{2,5,4},{5,8,3}}

  1. 结构体中的数组

结构体也允许数组作为其成员

struct book_bank

{

Int a[10];

float price;

};

  1. 结构体中的结构体

道理差不多,就是结构体嵌套

  1. 结构体与函数

要把结构体的值从一个函数传递给另一个函数,有以下3种方法。

(1)把结构体的每个成员作为函数调用的实参进行传递。然后就可以像普通变量一样米处理实参。这是最基本的方法,但如果结构体很大,这种方法就变得难以控制,效率也不高。

(2)将整个结构体的副本传递给被调用函数。由于函数使用的是结构体的副本,因此,在的数中对结构体成员的任何修改不能反映到初始结构体中。因此,需要函数将整个结构体返回给调用函数。但并不是所有编译器都支持这种方法。

(3) 使用指针以参数形式来传递结构体。在这种情况下,结构体的地址传递给被调用的函数。该函数可以间接地访问整个结构体。这类似于将数组传递给函数。与第一种方法相比,这种方法更有效。//见结构体与指针

  1. 结构体与指针

struct book_bank

{

char title|20];

char author [15];

int pages; 

float price;

}book[3];

ptr=book;

这是指针就指向book[0]第一个元素,就可以用指针访问成员

(*ptr).title   ptr->title

这里(*ptr)和ptr->都是book[0]的意思

ptr++表示指向下一个数组

print_ invent (struct invent *item)

printf ("'Name: %s \n", item->name) ;

printf ("Price: %f \n", item-›price);

结构体与函数方法(3)可用下面的语句来调用:

print_ invent (&product);

形参 item 接收的是结构体 product 的地址,因此它必须声明为 struct invent 类型(它表示的是product 结构体)的指针。

  1. 结构体大小

结构体变量大小可用sizeof来获取

例:sizeof(struct x)

共用体是从结构体中借用来的概念,因此遵循与结构体相似的语法。共用体与结构体两者之间主要的区别是存储形式。在结构体中,每个成员有自己的存储空间,而共用体中的所有成员使用相同的存储空间。这意味着,尽管共用体可以含有不同数据类型的多次成员,但一次只能处理一个成员。与结构体类似,共用体可以使用关键宇 union 来声明。

例:

uinon item

{

int m;

float x;

char c;

}code;

共用体只创建一个存储空间,每次只能被某一成员使用。当某个成员被赋予一个新值时,该新值将替代掉前一成员的值。

对共同体进行初始化,只能用与的第一个共同体成员类型相同的值进行初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值