gpt4 book ai didi

c++ - 将 bool 数组传递给函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:03 27 4
gpt4 key购买 nike

我将一个 bool 数组传递给函数并在函数内部对传递的数组进行一些修改,我在函数中所做的更改反射(reflect)在我传递给函数的原始数组中。例如,在代码中输出下方是 1 。为什么我会得到这个输出?例如,当我们传递一个整数变量时,局部变量保持其局部值。如何在下面的代码中在本地保留原始 bool 数组的本地拷贝。

#include<iostream>
using namespace std;
void fun(bool A[30])
{
A[0]=true;
}
int main()
{
bool used[3];
used[0]=used[1]=used[2]=0;
fun(used);
cout<<used[0];
}

最佳答案

Why am I getting this output ?

当“按值”传递数组时,数组本身并没有被复制,只有指向其地址的指针的拷贝被传递给被调用者(放在堆栈上)。无论您将参数声明为 bool[] 还是 bool*它都会衰减为指针。因此,您仍然可以在被调用函数中修改数组的内容。

How can I retain local copy of the original bool array locally?

您可以使用 std::array 或者您可以通过将数组包装在结构或类中来解决此问题,因为默认复制运算符将复制数组:

struct Array_by_val
{
bool my_array[30];
};

void func (Array_by_val x) {}

int main() {
Array_by_val x;
func(x);
}

引用C99标准中的6.3.2.1p3:

Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type "array of type" is converted to an expression with type "pointer to type" that points to the initial element of the array object and is not an lvalue. If the array object has register storage class, the behavior is undefined.

C11标准中同段内容基本相同,只是增加了新的_Alignof运算符。

看这里:

Why can't arrays be passed as function arguments?

关于c++ - 将 bool 数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18550869/

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