Kiedy przekazujemy zmienną do funkcji, dlaczego funkcja pobiera tylko duplikat zmiennej?

Kiedy przekazujemy zmienną do funkcji, dlaczego funkcja pobiera tylko kopię / duplikat zmiennej?

int n=1;

void foo(int i)
{
    i++;
}

Jak wszyscy wiemy, funkcja foo () nie może zmienić wartościn używając foo (n).

Oczywiście możemy przekazać adres zmiennej, aby dokonać zmiany zmiennej parametru.
Ale czy nie uważasz, że to trochę niewygodne?

Dlaczego c / c ++ jest zaprojektowany tak, aby dawać duplikat funkcji zamiast bezpośrednio nadawać jej „prawdziwą” zmienną?
Co nie oznacza korzyści / korzyści tego paradygmatu?

Aktualizacja:
Przeczytałem odpowiedź @ paxdiablo. Myślę, że wyjaśnienie jego „enkapsulacji, modularności i lokalizacji efektu” jest dobre.
Ale na mój sposób może również zachować wartość argumentu parametru. Może również realizować hermetyzację. W ten sposób: (załóżmy, że funkcja może bezpośrednio uzyskać „prawdziwą” zmienną zamiast duplikatu domyślnie)

void foo(int n)
{
    int temp=n;
    //Do something to temp...

}

I na mój sposóbskomplikowany mechanizm, taki jak „pass by reference” lub wskaźnik, może zostać wyeliminowany kiedy chcesz zmienić wartość przekazanych parametrów. To jest korzyść.

Po czasie myślenia. Zdaję sobie sprawę z powodu, dla którego c / c ++ nie jest zaprojektowany tak, jak zaproponowałem, tylko z powodu NIEWYGODNOŚCI mojej drogi!
Na mój sposób, jeśli funkcja ma długą listę zmiennych, byłoby straszne. To, co uważam za bardziej dogodny, to niedogodny fakt:
Musisz napisać tak:

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....}

}

Tak więc projektanci c / c ++ wprowadzają złożony mechanizm do kompromisu z wygodą.
Czy mam rację?

questionAnswers(8)

yourAnswerToTheQuestion