如何传递带有通过引用传递的结构参数的函数?

How do I pass a function with an argument of a structure passed by reference?

本文关键字:结构 参数 函数 引用 何传递      更新时间:2023-10-16

我正在开发我的程序,注意到它无法编译。我想知道为什么我不能将我的结构数组作为引用数组传递。我的代码在下面

#include <iostream>
#include <cstring>
using namespace std;
struct a{
int name;
};
void input(a & array1[10]){
for(int i=0;i<10;i++){
array1[i].name=i+1;
}
}
void print(a & array1[10]){
for(int i=0;i<10;i++){
cout<<array1[i].name<<endl;
}
}
int main(){ 
a array1[10];
input(array1[10]);
print(array1[10]);
}

当你将数组传递到函数中时:

  • <意见> 数组降级为指针。 所以你不妨有 函数将参数声明为指针,"a*",而不是 数组,a[].

  • 该函数不知道数组参数中有多少项。 你应该养成在传递数组时将"size"作为参数传递给函数的习惯。

    • 另一方面,作为指针传递的数组本质上是引用参数,而不是值(副本(参数。因此,您隐式地实现了通过引用传递数组和数组中所有项目的目标。

这可能是你想要的。

#include <iostream>
#include <cstring>
using namespace std;
struct a {
int name;
};
void input(a* array, size_t count){
for(int i=0; i<count; i++) {
array[i].name = i + 1;
}
}
void print(a* array, size_t count) {
for(int i=0; i<count; i++) {
cout<<array[i].name<<endl;
}
}
int main() { 
a array1[10] = {};  // zero-init the array of a's
input(array1, 10);
print(array1, 10);
}

通过引用传递数组的语法是错误的。

请参阅下面的工作代码。

#include <iostream>
#include <cstring>
using namespace std;
struct a{
int name;
};
void input(a  (&array1)[10]){
for(int i=0;i<10;i++){
array1[i].name=i+1;
}
}
void print(a (&array1)[10]){
for(int i=0;i<10;i++){
cout<<array1[i].name<<endl;
}
}
int main(){ 
a array1[10];
input(array1); // make sure you simply pass the array name
print(array1);
}

自己尝试一下

正如由语言括号的语法强制执行的那样,将 array1 括起来,如(&array1)是必要的。如果你不使用它们,你只是传递一个引用数组,而不是一个数组的引用

array1[10]是数组的第 10 个元素(实际上在您的情况下不存在,它只是数组外访问(,相反,您需要传递数组第一个元素的地址,该地址与数组名称相同,即数组名称衰减到指针。