gpt4 book ai didi

C++ 数组作为参数,编辑 : now includes variable scoping

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

好吧,我想这是一个简单的问题,所以我会接受敲门声,但我没有在谷歌或 SO 上找到我需要的东西。我想在一个地方创建一个数组,然后将它填充到另一个函数中。

我定义了一个函数:

void someFunction(double results[])
{
for (int i = 0; i<100; ++i)
{
for (int n = 0; n<16; ++n) //note this iteration limit
{
results[n] += i * n;
}
}
}

这是我的代码正在执行的近似操作,但无论如何,不​​应遇到任何溢出或越界问题或任何问题。我生成一个数组:

double result[16];
for(int i = 0; i<16; i++)
{
result[i] = -1;
}

然后我想把它传递给someFunction

someFunction(result);

当我设置断点并逐步执行代码时,在输入 someFunction 时,results 被设置为与 result 相同的地址,并且正如预期的那样,值是 -1.000000。但是,当我开始遍历循环时,results[n] 似乎没有解析为 *(results+n)*(results+n *sizeof(double)),它似乎解析为 *(results)。我最终得到的是,我没有填充我的结果数组,而是只得到一个值。我做错了什么?

编辑哦有趣,我有一个错字:它不是 void someFunction(double results[])。这是:

void someFunction(double result[])...

所以也许这会变成一个范围界定问题。如果我的 double result[16] 数组是在 main.cpp 中定义的,并且 someFunction 是在 main.cpp 包含的 Utils.h 文件中定义的,那么someFunction 中的 result 变量然后对 main 中的 result 数组造成严重破坏?

编辑 2:

@gf,在尝试用新项目重现此问题的过程中,原始项目“神奇地”开始工作。

我不知道该如何解释,因为没有任何变化,但我很确定我所看到的 - 我最初对问题的描述非常清楚,所以我认为我不是幻觉。我很感激时间和答案...抱歉浪费你的时间。如果它再次发生,我会再次更新,但与此同时,我想我没有问题。再次感谢。

最佳答案

只是关于问题的变量范围部分的一点 - 这里没有变量范围的问题。 someFunction 定义中的结果/结果是一个参数 -> 它将采用传入的值。被调用函数中的变量与其调用者之间没有关系 -> 调用者函数中的变量是除非传入,否则对被调用函数是未知的。此外,在 C++ 中的例程之间不会发生变量范围问题,因为没有嵌套例程。以下代码片段将演示范围界定问题:

int i = 0;  
{
int i = 0;
i = 5; //changes the second i, not the first.
//The first is aliased by the second i defined first.
}
i = 5; //now changes the first i; the inner block is gone and so is its local i

所以如果 C++ 确实有嵌套例程,这将导致变量作用域

void main()  
{
double results[16];
double blah[16];
doSomething(blah);
void doSomething(double * results)
{
//blah doing something here uses our parameter results,
//which refers to blah, but not to the results in the higher scope.
//The results in the higher scope is hidden.
}
}

关于C++ 数组作为参数,编辑 : now includes variable scoping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2725802/

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