将变量传递给函数时,为什么函数只获取变量的副本/副本?
int n=1;
void foo(int i)
{
i++;
}
众所周知,函数 foo() 不能通过n
使用 foo(n) 来改变 的值。
当然我们可以通过变量的地址来对参数变量做一些改变。
但是你不觉得这有点不方便吗?
为什么 c/c++ 设计为只给函数一个副本,而不是直接给函数“真实”变量本身?
这种范式的优点/好处是什么?
更新:
我已经阅读了@paxdiablo 的回答。我觉得他对“效果的封装、模块化和本地化”的解释很好。
但以我的方式,它也可以保留参数参数的值。也可以实现封装。通过这种方式:(假设函数可以直接获取“真实”变量而不是默认情况下的重复)
void foo(int n)
{
int temp=n;
//Do something to temp...
}
而在我看来,当您确实想更改传入参数的值时, 可以消除复杂的机制,例如“通过引用传递”或指针。这就是好处。
经过一段时间的思考。我意识到 c/c++ 没有按照我的建议设计的原因仅仅是因为我的方式不方便!
以我的方式,如果一个函数有很长的变量列表,那就太糟糕了。我认为更方便的方法实际上是不方便的:
你必须这样写:
void foo(int a,int b,double c,float d,char s...)
{
int temp1=a;
int temp2=b;
double temp3=c;
float temp4=d;
char temp5=s;
...
//Do something to temp{1,2,3,4,5....}
}
所以 c/c++ 的设计者引入了复杂的机制来权衡便利。
我对吗?