从单片机基础到程序框架(全集 2019pdf版).pdf - 第311页
struct S tructMould _2 GtMould_ 2_A; struct S tructMould _2 GtMould_ 2_B; unsigned l ong a; / /此变量用来 获取结构体变 量 GtMou ld_1 所占用的字 节总数 void main( ) //主函数 { a=sizeof (GtMould_1) ; //利用宏函数 si zeof 获取结构体 变量 GtMou ld_1 所占用的字 节总数…

struct StructMould_2 GtMould_2_A; //生成第 1 个结构体变量
struct StructMould_2 GtMould_2_B //生成第 2 个结构体变量
void main() //主函数
{
//先给 GtMould_2_A 赋初值。
GtMould_2_A.u32Data=1;
GtMould_2_A.u8Data=2;
//通过“整体赋值”,把结构体变量 GtMould_2_A 赋值给 GtMould_2_B。
GtMould_2_B=GtMould_2_A; //整体之间“一次性”的赋值
}
上述例子中的整体赋值,是因为结构体内部的数据比较“简单”,没有包含“指针”或者“字符串”或
者“其它结构体中的结构体”这类数据成员,如果包含这类成员,建议大家不要用整体赋值。比如遇到以下
这类结构体就建议大家直接用安全可靠的“成员赋值”:
struct StructMould //“造模”
{
unsigned char u8String[]=”String”; //字符串
unsigned char *pu8Data; //指针
struct StructOtherMould GtOtherMould; //结构体中的结构体
};
【71.5 例程练习和分析。】
现在编写一个练习的程序:
/*---C 语言学习区域的开始。-----------------------------------------------*/
struct StructMould_1 //“造模”
{
unsigned long u32Data; //一个 unsigned long 占用 4 个字节。
unsigned char u8Data; //一个 unsigned char 占用 1 个字节。
};
struct StructMould_2 //“造模”
{
unsigned char u8Data;
unsigned long u32Data;
};
struct StructMould_1 GtMould_1; //占用多少个字节内存呢?

struct StructMould_2 GtMould_2_A;
struct StructMould_2 GtMould_2_B;
unsigned long a; //此变量用来获取结构体变量 GtMould_1 所占用的字节总数
void main() //主函数
{
a=sizeof(GtMould_1); //利用宏函数 sizeof 获取结构体变量 GtMould_1 所占用的字节总数
//先给 GtMould_2_A 赋初值。
GtMould_2_A.u32Data=1;
GtMould_2_A.u8Data=2;
//通过“整体赋值”,把结构体变量 GtMould_2_A 赋值给 GtMould_2_B。
GtMould_2_B=GtMould_2_A; //整体之间“一次性”的赋值
View(a); //把 a 发送到电脑端观察
View(GtMould_2_B.u32Data); //把结构体成员 GtMould_2_B.u32Data 发送到电脑端观察
View(GtMould_2_B.u8Data); //把结构体成员 GtMould_2_B.u8Data 发送到电脑端观察
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
第 1 个数
十进制:5
十六进制:5
二进制:101
第 2 个数
十进制:1
十六进制:1
二进制:1
第 3 个数
十进制:2
十六进制:2

二进制:10
分析:
GtMould_1 所占的字节数 a 为 5。
GtMould_2_B 的结构体成员 GtMould_2_B.u32Data 为 1。
GtMould_2_B 的结构体成员 GtMould_2_B.u8Data 为 2。
【71.6 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C 语言学习区域”的代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口的 51 学习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。