就像前面可以将一个结构赋值给另一个结构一样,结构也可以作为参数直接传递,且函数使用结构的副本。当然,函数也可以返回结构。与数组名表示第一个元素的地址不同,结构名只是名称,要获得结构的地址,必须使用地址运算符&。
因为使用的式结构的副本,所以在函数处理结构时,需要复制结构,因此需要增加内存,所以有些程序员倾向于传递结构的地址,然后使用指针来访问结构的内容。
C++中第三种方式是使用引用传递,见后续章节。
1、参数为结构名的形式
struct rect
{
double x;
double y;
};
struct polar
{
double distance;
double angle;
};
polar rect2polar( rect xypos);//即传入一个rect类型的结构,返回一个polar类型的结构
在rect2polar函数中,使用xypos.x和xypos.y形式进行处理。
2、参数为指针的形式
polar * rect2polar( rect * xypos);
或void rect2polar( rect *xypos, polar *pda);
在调用函数时,对结构实体名需要使用&去地址。
3、string对象
和C风格字符串不同,可以将string对象作为完整的实体进行传递。需要传递多个string对象时,使用string类型数组。函数处理的同样是副本。当然也可以传递对象的指针,此时处理的是原始数据而非副本。
形式:void display(string sa[], int n);//n为字符串数
4、array对象
头文件#include <array>,命名空间std。作为类对象,同样可以像结构一样按值传递。当然也可以传递对象地址或使用引用。
std::array<double, 4> express;
void show(std::array<double,4> da);
voild fill(std::<double,4> * pa);
show(express);//按值传递
fill(&express);//传递地址
如果传递指针,在函数处理中,使用(*pa)[i]对其中的四个元素进行处理。