C 语言之结构

结构含义

结构有两层含义:一层含义是“结构布局”,结构布局告诉编译器如何表示数据,未让编译器为数据分配空间。创建一个结构变量,即为另一层含义。

建立结构声明
#include<stdio.h>
struct book
{
	int number;
	char code[4];
	float cost;
};
int main(void)
{
	struct book library;    //创建了一个结构变量 library
	                        //编译器使用 book 模板为该变量分配空间
							//struct book 相当于声明中的 int 或 float
	                        //可定义多个变量,甚至是指向 struct stuff 类型的指针
	return 0;
}
  • 一个结构的内存分配

在这里插入图片描述

  • 就计算机而言,下面的声明
struct stuff library;
//是以下声明的简化,声明结构的过程和定义结构变量的过程组合成一个步骤
struct stuff    //组合时 stuff 结构标记可省略
{
	int number;
	char code[4];
	float cost;
}library;
初始化结构
struct stuff library = {10,'c',12};
//访问初始化后的中用结构成员运算符"."访问成员
printf("%d", library.number);
结构数组声明
struct book library[100]; //library 是一个数组名,不是结构名,数组中每个元素都是 struct book 类型的结构变量。
  • 一个结构数组的内存分配
    在这里插入图片描述
指向结构的指针
struct stuff* p;   //声明并未创建一个新的结构,可以指向任意现有 stuff 类型的结构
p = &math         //如果 math 是 stuff 类型,结构名并不是结构地址,因此指向的结构前面要加上“&”

//指针访问成员,以下等价
p->number == (*p).number == math.number 
typedef 关键字

利用 typedef 可以为某一类型自定义名称,通常用大写字母表示定义的名称,以提示用户这个类型名实际上是一个符号的缩写。与 #define 类似,但两者有 3 处不同:

  1. tyoedef 创建的符号只受限于类型,不能用于值。
  2. typedef 由编译器解释,不是预处理器。
  3. 受限范围内,typedef 比 #define 更灵活。
	typedef unsigned char BYTE; //为现有类型创建一个名称
	
	typedef char* STRING;   //把 STRING 解释成类型的标识符,该类型是指向 char 的指针
	char* string;           //把 string 识别为一个指向 char 的指针变量
	STRING name,sign;       //相当于 char* name,sign
	
	typedef struct 
	{
		double x;
		double y;
	}rect;
	rect r1 = { 3.0,3.6 };  //被翻译成 struct{double x;double y}r1 = {3.0,3.6};
	rect r2;                //被翻译成 struct{double x;double y}r2;
	r2 = r1;                //C 认为两个结构的类型相同,所以赋值是有效操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值