2013-10-17 88 views
0

我在引用中生锈,但我知道它们只是变量的另一个名称。如果你有一个同名的参考文献呢?为什么它会工作/不工作?C++参考参数可以与参数具有相同的名称吗?

例如:

foo(int &a) { 
    printf(a); 
} 
main() { 
    int a; 
    foo(a); 
} 

感谢

+4

那么,在这种情况下,'printf(a)'其中'a'是一个'int'根本不应该工作,不管名字如何。 – jwodder

+1

我想你还需要更好地理解范围规则。如果函数foo参数只是一个“int a”,而不是“int&a”,那么该函数也会与传入的参数同名。 – franji1

回答

3

“它为什么会工作/不工作?”

根据您的论点名称:是的,它会工作。 main中的a是一个局部变量,标识符为a,它指的是这个变量只在相同的范围内有效。在foo中,有一个参数a,但这个a是与第一个不同的标识符。


PS:我认为这一点:

printf(a); 

的意思是:

printf("%d", a); 
+0

区分变量和对它的引用是有帮助的。变量是以特定方式(其类型)解释的一组内存位置。它可能以几种不同的方式被引用。例如'int a;'创建用于存储数字的字节并将其排列为'a'。类似地,'int b [10];'创建10个变量;第三个可能被命名为'b [2]'。一个引用变量'int&r = b [2];'创建一个变量,并安排它使用它来引用另一个变量。命名'r'会导致变量_it_ _points_ _to_被命名;这个例子中的第三个'b'变量。 –

0

是的,它会运行int &a是函数的局部变量,这将刚刚收到参考传递给它,它的作用域仅限于此函数,而Main函数中的a在主函数内具有作用域。