Я передаю элементы массива в функцию. Эта функция добавляет 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;
}
Массив распадается на указатель,
void change(int x[],int y)
эквивалентно void change (int *x, int y )
с x[i] += 5;
вы меняете содержимое адреса на x+i
y=5;
внутри change
в основном обновляет локальную копию y
чей адрес не был передан, следовательно, нет изменений в действительной стоимости y
после change
существует
поскольку array
всегда является ссылочным типом, поэтому любые изменения снаружи будут влиять на array
в вызове функции тоже.
Как вы можете видеть в своем коде:
change(sharan,a); // here `sharan` points the base address an you are passing it.
C ++ не поддерживает передачу необработанных массивов по значению. Когда вы пытаетесь передать их как таковые, они преобразуются в указатель на массив. По этой причине, если вы измените элементы массива, это изменение будет отражено в вызывающей функции. В этом случае main()
,