请注意,结构名称与成员变量名称之间有一个点分隔。这个被称为点运算符,用于表示访问结构的成员。如果用黑盒子表示结构变量的名称,就像myServicePeople一样。那么隐藏在黑盒子里的东西就是该结构的成员。你无法“查看”这些成员,因为缺乏开启的钥匙。然而,黑盒子里有一扇门,使用点运算符操作视为打开了通往黑盒子的门。使用点运算符后,即可访问黑盒子中的成员。一旦进入结构,你所需要做的就是使用指定的成员。
如前所示,如果进行赋值操作,就是下面所示:
clientID=myServicePeople.ID;//Retrieving structure data
使用点运算符获取结构的特定成员(即ID)的数据,然后将该数据复制到赋值运算符左侧的变量中(即clientID)。这也意味着在执行语句后,myServicePeople结构的状态保持不变。
但是,如果点运算符出现在赋值运算符的左侧,如下所示:
myServicePeople.ID=clientID;//Setting structure data clientID的右值被复制到myServicePeople结构的成员ID的右值中。因此,myServicePeople的状态由赋值语句更改。
让我们编写一个使用结构和点运算符的简短程序。代码如清单10-1所示。
代码清单10-1.Using the dot Operator
(www.xing528.com)
这段代码除定义两个名为myServicePeople和yourServicePeople的servicePeople结构变量外,没有其他作用。程序使用几个Serial.print()函数调用输出有关结构变量的信息。如果你仔细看一下图10-3,你会发现myServicePeople存储在内存地址456,而yourServicePeople的左值为492。ID为2字节,Name为20字节,PW为10字节,Phone为4字节,总共36(2+20+10+4)字节。你可以通过查看图10-3中的最后一行来验证这一点。显然,myServicePeople的左值加上36字节的结构存储要求等于yourServicePeople的左值,即492=456+36。
因此,我们知道这两个结构变量背靠背存储在闪存中。
图10-3中的第二行显示myServicePeople.ID的值为0,而yourServicePeople.ID的值为205。这完全是应该的,因为值205被分配到yourServicePeople的ID成员中。
声明:
myServicePeople=yourServicePeople;
将yourServicePeople变量的内容复制到myServicePeople中。因为编译器知道每个servicePeople结构变量使用36字节的内存进行存储,编译器只需从内存地址492开始复制36字节到内存地址456(myServicePeople的左值)。因此,这两个结构变量现在分别具有相同的右值,程序在下一行显示两个变量的ID成员的右值输出。图10-3中的最后一行确认每个结构变量需要36字节的存储空间。
图10-3 程序输出结果
代码显示,尽管可以为两个结构的每个成员执行赋值语句,但使用赋值语句简单地复制整个结构要容易得多。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。