我无法理解为什么要将包含元素的数组传递给 一个函数,导致我的数组不再包含函数内的元素。
在传入包含3个对象的数组之前,我的项目是sturct,大小为 数组是72(每个对象24)。一旦进入函数,我的数组的大小 是24,我假设是我的数组中第一个元素的大小。但是,这个 事实并非如此。
我的问题是,为什么我的数组在函数中与函数之外的相同?
标题文件:
#include <iostream>
using namespace std;
// header file for shop items
struct items
{
string name;
int price;
string examine;
};
主文件:
#include "shop_items.h"
#include <iostream>
using namespace std;
int getLongestName(items &shop)
{
/*Iterates over each element in array
if int longest < length of element's name, longest = length of element's name.*/
int longest = 0;
// shop size is 24, the size of a single element.
cout << "sizeof(shop) right inside of function:" << sizeof(shop) << endl;
return longest;
}
void test1()
{
// initialize shop items
items sword;
items bow;
items shield;
// set the name, price, and examine variables for each item.
sword.name = "sword"; sword.price = 200; sword.examine = "A sharp blade.";
bow.name = "bow"; bow.price = 50; bow.examine = "A sturdy bow.";
shield.name = "sheild"; shield.price = 100; shield.examine = "A hefty shield.";
// create an array for iterating over the each element in item shop.
items shop[] = {sword, bow, shield};
//sizeOfShop = 72, 24 for each element (the sword, bow and shield).
cout << "sizeof(shop) right outside function: " << sizeof(shop) << endl;
int longest = getLongestName(*shop);
}
int main()
{
test1();
cout << "\n\nPress the enter key to exit." << endl;
cin.get();
}
What is useful about a reference-to-array parameter?
上述问题的答案帮助我更好地理解了我试图做的事情。但是,在尝试通过引用传递数组时,我遇到了不同的错误。
答案 0 :(得分:1)
您没有传递数组。您只传递数组的第一个元素。
int longest = getLongestName(*shop);
表达式*shop
等同于shop[0]
因此,在函数内部,您可以获得items
类型的一个对象的大小。
此外,您将函数getLongestName
声明为具有类型为item的对象的类型引用参数。
int getLongestName(items &shop);
如果你想通过引用传递整个数组,那么你应该将它声明为
int getLongestName( items ( &shop )[3] );
并且必须将该函数调用为
int longest = getLongestName(shop);
或作为
int getLongestName(items *shop, size_t n);
其中第二个参数指定数组中元素的数量。
该函数必须被称为
int longest = getLongestName(shop, 3 );