我正在编写程序,注意到它没有编译。我想知道为什么不能将结构数组作为引用数组传递。我的代码在下面
#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]);
}
答案 0 :(得分:1)
您通过引用传递数组的语法是错误的。
请参见下面的工作代码。
#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个元素(在您的情况下实际上不存在,这只是数组外访问),而您需要传递第一个元素的地址与数组名称相同的数组,即数组名称衰减为指针。
答案 1 :(得分:1)
将数组传递给函数时:
<观点> 数组降级为指针。所以您不妨拥有
函数将参数声明为指针"a*"
,而不是
数组a[]
。
该函数不知道array参数中有多少个项目。传递数组时,应该养成将“大小”作为参数传递给函数的习惯。
这可能就是您想要的。
#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);
}