【发布时间】:2016-02-03 21:41:51
【问题描述】:
今天我在用C++编程的时候注意到了这个现象:
int main()
{
int a = 42;
func (a);
cout << a << endl;
}
void func (int x)
{
x = 5;
}
当然输出是 42。否则要得到 5 作为输出,我可以使用地址重写函数:
void func (int &x)
{
x = 5;
}
这是我理解的,但是当我这样做时:
int main()
{
int a[2][2] = { {2,2}, {2,2} };
func (a);
cout << a[1][2] << endl;
}
void func (int x[2][2])
{
x[1][2] = 5;
}
输出实际上是 5,但对我来说这是无法解释的。为什么 func 会影响 main 的任何变量?就因为它是一个二维数组?
【问题讨论】:
-
你一开始就不应该使用数组。
-
为什么降价?这个问题在我看来完全合理。
-
“否则要得到 5 作为输出,我可以使用地址重写函数”。小心:
void func (int &x)表示您正在通过 reference。int &是对 int 的引用。当然,它看起来像“地址”运算符,但它是不同的。当您调用函数时,&表示您要传递变量的地址(例如,如果您调用了func(&a);,但在函数声明和definitions 你是在表示参数会通过引用传递。也许你只是用错了词,但是如果这个概念不清楚,一定要检查一下! -
我看到 Christian Hackl 刚刚解释了我的意思。
-
@FabioTurati:对于 C++ 初学者来说(可以理解的)令人困惑的事情就是
&字符用于两个完全不相关的事情。
标签: c++ arrays function multidimensional-array