Когда передается переменная в функцию, почему функция получает только дубликат переменной?

При передаче переменной в функцию, почему функция получает только копию / дубликат переменной?

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 ++ вводят сложный механизм для удобства.
Я прав?

Ответы на вопрос(9)

Ваш ответ на вопрос