如何传递带有通过引用传递的结构参数的函数?
How do I pass a function with an argument of a structure passed by reference?
我正在开发我的程序,注意到它无法编译。我想知道为什么我不能将我的结构数组作为引用数组传递。我的代码在下面
#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 个元素(实际上在您的情况下不存在,它只是数组外访问(,相反,您需要传递数组第一个元素的地址,该地址与数组名称相同,即数组名称衰减到指针。
相关文章:
- 使用不带参数的函数访问结构元素
- 将结构字段的类型展开为可变模板参数
- MSVC将仅移动结构参数解释为指针
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 如何传递带有通过引用传递的结构参数的函数?
- 展开可变参数模板结构
- 在类构造函数中定义结构变量的参数
- 如何在方法中传递结构参数
- 我应该在C++中将这些结构用作参数化构造函数吗?
- 在模板方法 c++ 中传递结构参数
- 结构参数在函数调用时损坏
- 如何使用结构参数委托构造函数
- 错误 C2783:无法推断结构参数的模板参数
- 用于存储元组键的数据结构:参数关系列表
- 使用结构参数从程序集中调用C++函数
- 如何为llvm IR调用指令创建结构参数
- c++为函数使用结构参数而不是多个参数
- 导入结构参数
- 将结构参数传递给结构内的函数
- 带有结构参数的pthread不起作用