c ++数组未声明的标识符错误

时间:2015-05-08 01:59:56

标签: c++ arrays

我只是纯粹的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数组。

1 个答案:

答案 0 :(得分:1)

您应该了解范围在C / C ++中的工作原理。在作用域中声明的变量仅在该作用域和内部作用域内可见。在您的情况下,您在第一个buf循环的本地范围内声明for。它在另一个for范围内不可见,因为范围是不同的。如评论中所述,您需要使变量对for范围都可见。唯一的解决方案:在for循环的外部范围内声明它。

修改

您问为什么可以通过本地范围内可见的变量修改input。好吧,你的变量是一个指向float* buf的指针input。后者在范围之外声明,因此两个for循环都可以看到它们(它们的范围是封闭的,所以它们看到“外部世界”)。因此,您可以通过本地指针访问它,并相应地修改它。

经验法则:从你的房子里你可以看到世界,但世界却看不到你的房子(至少,如果你小心,C / C ++编译器都非常小心)。