假设你希望从函数调用返回一个结构。这是怎么做到的?清单10-2与清单10-1几乎相同:
代码清单10-2.Modified dot Operator Example
第一行是程序顶部的函数声明。编译器需要知道SetPhoneNumber()对参数的取值及其返回值。也就是说,该语句是可用于类型检查的函数(原型)声明。下一行出现在列表的中间,并用注释“Changed”标记。在本声明中:
myServicePeople=SetPhoneNumber(yourServicePeople);//Changed变量yourServicePeople被传递给函数。如清单10-2所示新函数将temp的电话号码设置为2345678。代码将temp返回给调用方,调用方将结构的值指定给myServicePeople。下面的两条新语句在setup()函数中显示已复制到myServicePeople.phone的新电话号码。的确myServicePeople变量的每个成员都与myServicePeople变量相同……有点像。
调用SetPhoneNumber()后,你可以从打印语句中看到myServicePeople.Phone已经改变了。但是你的服务人员呢?电话呢?如果再添加一些打印语句,则你将发现你的服务人员和电话为0。为什么呢?
除非被告知要执行其他操作,否则传递给函数的任何值类型都会发送该变量的副本函数,而不是变量的左值。因为已经发送了一份副本,所以没有办法使函数永久更改所传递变量的右值。这一结论适用于结构,结构也可用于简化向函数传递参数的过程。例如,可能是函数需要使用存储在四个传感器中的数据来决定是否向容器中添加化学品。这个函数的签名可能是:
int AddChemical(int sensor1,int sensor2,int sensor3,int sensor4);
相反,你可以定义一个结构:
struct sensors{
int sensor1;(www.xing528.com)
int sensor2;
int sensor3;
int sensor4
}vatSensors;
然后使用以下命令调用函数:
AddChemical(vatSensors);
这使得函数调用不那么冗长。另外,如果你以后发现需要向函数调用中添加一些额外的参数,那么更改结构声明以添加新参数是非常容易的。
如果你希望该函数永久更改ServicePeople.Phone的值,该怎么办?这是下一节的讨论内容。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。