《C Primer Plus》 第14章 结构和其他数据形式 (学习总结)

目录

14.2建立结构声明

struct book{
	char title[MAXTITL];
	char author[MAXTITL];
	float value;
};

关键字:struct,后面是一个可选标记:book,稍后程序中可以使用该标记引用该结构。
在后面程序中可以这样声明:
struct book library;
这把library声明为一个使用book结构布局的结构变量。

14.3定义结构变量

14.3.1初始化结构

同int等变量一样,结构体同样可以初始化。

struct book library={
	"The Pious Pirate and the Devious Damsel",
	"Renee Viotte",
	1.95
};

14.3.2访问结构成员

结构类似一个“超级数组”。访问结构成员就要用结构成员运算符——点(.)访问。例如library.value即可访问library的value部分。注意:“.”的优先级高于“&”。所以在scanf("%f",...)中,&library.title和&(library.float)一样。

14.4结构数组

14.4.1声明结构数组

struct book library[MAXBKS];
以上代码把library声明为一个内含MAXBKS个元素的数组。数组的每个元素都是一个book类型的数组。

14.4.2标识结构数组的成员

访问单独结构:
library[0].value第一个数组元素与value相关联。
library[4].title 第五个数组元素与title相关联。
library[2].title[4]library数组的第三个结构变量中书名的第五个字符。

14.6指向结构的指针

(指针复杂的一批)QAQ

14.6.1 声明和初始化结构指针

声明结构指针很简单:
struct guy *him
该声明并未创建一个新的结构,但是指针him现在可以指向任意现有的guy类型的结构。
注意:结构变量名并不是结构的地址,因此要在结构变量名前面加上运算符“&”。

14.6.2用指针访问成员

第一种方法:用->运算符
第二种方法:如果him==&fellow[0],那么*him==fellow[0]。

14.7向函数传递结构信息

14.7.1传递结构成员

只要结构成员是一个具有单个值的数据类型(int,char float,double或指针),便可把它作为参数传递给接受接受该特定类型的函数。

14.7.2传递结构的地址

当函数使用指向结构的指针作为它的参数。并把地址传递给该函数,使得指针指向结构变量。然后通过->运算符获取其值。

14.10联合简介

union是一种数据类型,能在一个内存空间中储存不同的数据类型。

union hold{
	int digit;
	double bigfl;
	char letter;
};

声明

union hold fit;//hold类型的联合变量
union hold save[10];//内含10个联合变量的数组
union hold *pu;//指向hold类型联合变量的指针

联合只能储存一个值,这点与结构不同。

14.10.1使用联合

fit.digit=23
fit.bigfl=2.0
fit.letter='h'
联合的成员共享一个共同的存储空间。联合同一时间只能储存一个单独的数据项。

14.11枚举类型

enum关键字,可以创建一个新“类型”并指定它可具有的值(实际上,enum常量是int类型)。默认情况下,枚举列表中的常量都被赋予0,1,2等以此类推
enum kids {nippy,slats,skippy,nina.,ia}
声明中nina的值是3 。

14.12typedef简介

typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。与#define类似,但又不同

  • 与#define不同,typedef创建的符号名只受限于类型,不能用于值。
  • typedef由编译器解释,不是预处理器。
  • 在其受限范围内,typedef比#define更灵活。
    typedef unsigned char BYTE;
    随后,便可用BYTE来定义变量:
    BYTE x,y[10],*z;

14.14函数和指针

函数名代表函数的地址,可以把函数的地址作为参数传递给其他函数,然后这些函数就可以使用被指向的函数。如果把特定函数的地址赋给一个名为pf的函数指针,可以通过以下两种方式调用到该函数:

#include<math.h>
double (*pdf)(double);
double x;
pdf=sin;
x=(*pdf)(1.2);
x=pdf(1.2);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值