gpt4 book ai didi

C++ 编译器在没有我告诉它的情况下通过引用传递?

转载 作者:搜寻专家 更新时间:2023-10-31 00:07:46 24 4
gpt4 key购买 nike

所以我在今年早些时候制作了一个程序,教我们如何使用数组。就在最近,我学习了 C++ 中指针和结构的使用。既然我有了这些知识和理解(或者我认为如此),我对我之前的程序如何成功运作感到困惑!

在我多说之前,这是程序代码:

https://pastebin.com/AYyv2Bzt

特别注意我的 askSales 函数,因为它让我感到困惑

void askSales(int salesArray[], string namesArray[])
{
for (int counter = 0; counter <= NUM_OF_POS; counter++)
{
cout << "How many jars of " << namesArray[counter] << "sold? : ";
cin >> salesArray[counter];

while (salesArray[counter] < 0 )
{
cout << endl << "You cannot enter a negative number for sales. If no jars were\nsold please enter 0. Please answer prompt again."
<< endl << endl
<< "How many jars of " << namesArray[counter] << "sold? : ";
cin >> salesArray[counter];
}
}
}

这是我感到困惑的地方:

当这些参数不是通过引用传递时,我的程序究竟如何能够修改传递给 askSales 的数组的内容?

最佳答案

在您的函数声明和对它的调用中,您得到 array-to-pointer decay .

这意味着您的函数完全等同于此:

void askSales(int* salesArray, string* namesArray)

这显然不是按值传递数组并创建数组的新拷贝,而是传递指向原始数组的指针。这给出了按引用传递的效果(因为指针引用了函数外部的原始数组)。

关于C++ 编译器在没有我告诉它的情况下通过引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52449913/

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