gpt4 book ai didi

c++ - 将结构数组传递给 C++ 中的函数并出现错误

转载 作者:行者123 更新时间:2023-11-28 02:51:21 26 4
gpt4 key购买 nike

嗨, friend 们,在我下面的 C++ 程序中。我正在将结构数组传递给函数,但其​​中出现错误。任何人都可以帮忙吗?程序中存在以下错误。

1.需要常量表达式。2.非法结构操作。3.声明语法错误。

#include<iostream.h>
#include<conio.h>
void calc_price(struct c_items);
struct c_items
{
float name[80];
int quantity;
int price;
};
int main(void)
{
int num_items=3;
c_items obj[num_items]
calc_price(obj,num_items);
getch();
return 0;
}
void calc_price(c_items obj[],int num_items)
{
int i,n,total=0;
cout<<"Enter number of items = ";
cin>>n;
for(i=1;i<=num_items;i++)
{
cout<<"Enter name of item"<<i<<" = ";
cin>>obj[i].name;
cout<<endl<<"Enter price of item"<<i<<" = ";
cin>>obj[i].price;
cout<<endl<<"Enter quantity of item"<<i<<" = ";
cin>>obj[i].quantity;
}
cout<<endl<<endl<<"Retail value of inventory ";
for(i=1;i<=5;i++)
{
cout<<endl<<obj[i].name<<i<<" "<<obj[i].price<<"$";
total=total+obj[i].price;
}
cout<<"Total retail value = "<<total<<"$";
}

最佳答案

在 C++ 和 C 中,数组是通过地址(指针)而不是值传递的。这有一个副作用,即接收函数不知道数组有多大,即使您调整参数来告诉它也是如此。

C++从C继承了一种叫做“数组指针等价”的东西,这意味着你可以这样写

struct foo;
void fn(foo f[25]);

但这只是语法糖。编译器实际上认为你写了:

void fn(foo * f);

(你会看到有人写foo* f,有人写foo *f,还有人写foo f[];他们都是和上面那行意思一样)

这是传递结构数组的简单、完整的示例(现场演示 http://ideone.com/qc4t53)

#include <cstddef>

struct Foo
{
int m_i; // 'm_' to distinguish a member variable.
};

int structFunc(Foo* foos, size_t numFoos);

int main()
{
const size_t NumFoos = 10;
Foo mainFoos[NumFoos];

int i = structFunc(mainFoos, NumFoos);

return 0;
}

int structFunc(Foo* foos, size_t numFoos)
{
int retVal = 0;
for (size_t i = 0; i < numFoos; ++i) {
foos[i].m_i = i;
++retVal;
}
return retVal;
}

关于数组指针等价的更多信息,来自 C FAQ

关于c++ - 将结构数组传递给 C++ 中的函数并出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22978841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com