Когда передается переменная в функцию, почему функция получает только дубликат переменной?
При передаче переменной в функцию, почему функция получает только копию / дубликат переменной?
int n=1;
void foo(int i)
{
i++;
}
Как мы все знаем, функция foo () не может изменить значениеn
используя foo (n).
Конечно, мы можем передать адрес переменной, чтобы внести некоторые изменения в переменную параметра.
Но вы не думаете, что это немного неудобно?
Почему c / c ++ предназначен только для того, чтобы выдавать дубликат функции вместо непосредственного указания "реального" сама переменная к функции?
Какова польза / преимущество этой парадигмы?
Update:
Я прочитал ответ @ paxdiablo. Я думаю, что его «инкапсуляция, модульность и локализация эффекта» объяснение это хорошо.
Но, на мой взгляд, он также может сохранять значение аргумента параметра. Он также может реализовать инкапсуляцию. Таким образом: (предположим, что функция может напрямую получить переменную & quot; real & quot; вместо дубликата по умолчанию)
void foo(int n)
{
int temp=n;
//Do something to temp...
}
И по-моему,the complicated mechanism,such as "pass by reference" or pointer can be eliminated когда вы хотите изменить значение переданных параметров. Это выгодно.
После времени мысли. Я понимаю, что причина того, почему 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 ++ вводят сложный механизм для удобства.
Я прав?