C 语言之结构

结构含义

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

建立结构声明

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

在这里插入图片描述

  • 就计算机而言,下面的声明
struct stuff library;
//是以下声明的简化,声明结构的过程和定义结构变量的过程组合成一个步骤
struct 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 认为两个结构的类型相同,所以赋值是有效操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章