我只是纯粹的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数组。我不明白。我在第二句有一个新的声明buf用于句子但是修改后的值仍然影响到sencond buf数组。
答案 0 :(得分:1)
您应该了解范围在C / C ++中的工作原理。在作用域中声明的变量仅在该作用域和内部作用域内可见。在您的情况下,您在第一个buf
循环的本地范围内声明for
。它在另一个for
范围内不可见,因为范围是不同的。如评论中所述,您需要使变量对for
范围都可见。唯一的解决方案:在for
循环的外部范围内声明它。
修改强>
您问为什么可以通过本地范围内可见的变量修改input
。好吧,你的变量是一个指向float* buf
的指针input
。后者在范围之外声明,因此两个for
循环都可以看到它们(它们的范围是封闭的,所以它们看到“外部世界”)。因此,您可以通过本地指针访问它,并相应地修改它。
经验法则:从你的房子里你可以看到世界,但世界却看不到你的房子(至少,如果你小心,C / C ++编译器都非常小心)。