Изменение элементов массива по вызову по значению

Я передаю элементы массива в функцию. Эта функция добавляет 5 к каждому элементу массива. Я также передаю целое число и добавляю к нему 5 … Несмотря на то, что это функция «вызов по значению», значение целого не изменяется main() (что ожидается), но элементы массива меняются …

Я не хочу знать, как и почему?

#include <iostream>

using namespace std;

void change(int x[],int y);

int main()
{
int sharan[]={1,2,3,4};
int a=10;
change(sharan,a);
for(int j=0;j<4;j++)
{
cout<<sharan[j]<<endl;
}
cout<<endl<<"a is : "<<a;
return(0);
}

void change(int x[],int y)
{
for(int i=0;i<4;i++)
{
x[i]+=5;
}
y+=5;
}

-3

Решение

Массив распадается на указатель,

void change(int x[],int y) эквивалентно void change (int *x, int y )

с x[i] += 5;

вы меняете содержимое адреса на x+i

y=5; внутри change в основном обновляет локальную копию y чей адрес не был передан, следовательно, нет изменений в действительной стоимости y после change существует

5

Другие решения

поскольку array всегда является ссылочным типом, поэтому любые изменения снаружи будут влиять на array в вызове функции тоже.

Как вы можете видеть в своем коде:

change(sharan,a); // here `sharan` points the base address an you are passing it.
1

C ++ не поддерживает передачу необработанных массивов по значению. Когда вы пытаетесь передать их как таковые, они преобразуются в указатель на массив. По этой причине, если вы измените элементы массива, это изменение будет отражено в вызывающей функции. В этом случае main(),

1