我只是一个纯粹的 C 用户。
我正在尝试使用 C++ 实现。 但是我很难理解数组的意义。
代码
问题1
...
float *input = read_file(arg[1], ..);
for(;)
{
float *buf = input;
buf[c] = 1;
}
for(;)
{
buf[c] = 1;
}
正如您在上面的代码中看到的,不存在 buf 声明。 但是有像这个'buf'未声明的标识符这样的错误。 我不明白为什么会出错? 我是否必须每次都声明标识符?
问题2
...
float *input = read_file(arg[1], ..);
for(;)
{
float *buf = input;
buf[c] = 2;
}
for(;)
{
float *buf = input;
buf[c] = 1;
}
如果我修改了第一个 buf 数组的值,那么修改后的数组值会影响到第二个 buf 数组。我不明白。我有一个新的 declare buf at second for sentence 但修改后的值仍然影响到 second buf 数组。
最佳答案
您应该了解作用域在 C/C++ 中的工作原理。在作用域中声明的变量仅在该作用域和内部作用域内可见。在您的情况下,您在第一个 for
循环的本地范围内声明 buf
。它在其他 for
范围内不可见,因为范围是不同的。如评论中所述,您需要使变量对两个 for
范围都可见。唯一的解决方案:在 for
循环的外部范围内声明它。
编辑
您问过为什么可以通过在局部范围内可见的变量修改 input
。那么,您的变量是一个指向 input
的指针 float* buf
。后者在作用域外声明,所以它对两个 for
循环都是可见的(它们的作用域是封闭的,所以它们看到“外部世界”)。因此,您可以通过本地指针访问它,并相应地修改它。
经验法则:从你的房子里你可以看到世界,但世界看不到你的房子里面(至少,如果你小心的话,C/C++ 编译器非常小心)。
关于C++数组未声明的标识符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30114607/