将结构和结构成员传递给函数

use*_*079 1 c++ arrays structure members

将结构传递给函数时,原型/标题会是什么样子?将结构成员传递给函数时,它们会是什么样子?

例如...

struct a_struct{
int a;
int b;
};

a_struct point;

void f1(a_struct)
void f2(a_struct)
Run Code Online (Sandbox Code Playgroud)

并且假设我想将整个结构传递给f1,但只是f2的成员.我会使用数据类型a_struct作为参数吗?或者f2会有不同的数据类型,因为我只传递一个int成员.对于一系列结构,这会有所不同吗?我负责编写的程序应该使用结构数组.我认为这不会产生太大的影响,除非它会自动通过引用传递.

Sco*_*oPi 8

当传递对象(不仅仅是标量值)时,您必须关注内存所有权和复制等.这意味着您有多个选项可用于声明函数的接口.例如,您可以通过引用传递或按值传递.

可能的声明可能是:

void f1(a_struct& my_struct);
Run Code Online (Sandbox Code Playgroud)

这将传递对a_struct对象的引用,并阻止对象的任何复制.但是,您的示例结构只包含标量值,因此复制对象的可能性不会引起太多担心.结果,这就足够了:

void f1(a_struct my_struct);
Run Code Online (Sandbox Code Playgroud)

至于将结构的一个成员传递给一个函数,该函数需要被声明为采用该成员的类型.例如,要将a_struct的成员传递给函数,您可以:

void f1(int val);
Run Code Online (Sandbox Code Playgroud)

最后,数组会使事情变得复杂,因为它们会作为指向函数的指针进入.例如,要传递a_struct对象的数组,您可以进行以下声明:

void f1(a_struct* my_struct);
Run Code Online (Sandbox Code Playgroud)

但是,您可以简单地引用参数.例如:

my_structs[1];
Run Code Online (Sandbox Code Playgroud)