请参考块范围外的变量但是在函数范围内(C / C ++)

时间:2013-11-23 17:41:43

标签: c reference scope

您好我想知道如何在块内引用变量'x'(主函数):

#include <stdio.h>
int x=10;  // Global variable x ---> let it be named x1.

int main()
{
  int x=5;     //  main variable x with function scope ---> let it be named x2.
  for(x=0;x<5;x++)
  {
     int x=2;      // variable x with block scope ---> let it be named x3.
     printf("%d\n",x);   // refers to x3
     printf("%d\n",::x); // refers to x1
     // What is the syntax to refer to x2??? how should I try to access x2?
  }
}

3 个答案:

答案 0 :(得分:2)

  1. 对于C

    您无法访问main中的x1。本地变量优先于全局变量。 主函数x即x2可以在for块之外或之前访问。

  2. 对于C ++

    C ++具有命名空间的功能,通过该功能,您可以将特定的类/变量.etc分组到范围中。

  3. 所以,在嵌套的命名空间中包含第一个x1和x2(你甚至可以不用它)。

    e.g.  namespace a { public : int x; namespace b { public : int x; }  }
    
       Then to use x1, a::x and to use x2 write a::b:: x;
    

答案 1 :(得分:1)

在这种情况下,您不能引用x2。它在局部作用域中声明(C除了标签之外没有函数作用域的概念),并且它的声明被内部块中的x3掩盖。请参阅http://www-01.ibm.com/support/docview.wss?uid=swg27002103&aid=1中第3页的“本地范围”。

答案 2 :(得分:-5)

x2x3是相同的。 for块不是范围。当编译器看到这个:

int x = 5;

for(x = 0; x < 5; x++) {
   int x = 2;
}

......它实际上看到了这个:

int x;
x = 5;

for(x = 0; x < 5; x++) {
   x = 2;
}